queueing/0000775000175000017500000000000013356152316012267 5ustar morenomorenoqueueing/DESCRIPTION0000664000175000017500000000170613356152302013774 0ustar morenomorenoName: queueing Version: 1.2.6 Date: 2018-10-06 Author: Moreno Marzolla Maintainer: Moreno Marzolla Title: Octave package for Queueing Networks and Markov chains analysis Description: The queueing package provides functions for queueing networks and Markov chains analysis. This package can be used to compute steady-state performance measures for open, closed and mixed networks with single or multiple job classes. Mean Value Analysis (MVA), convolution, and various bounding techniques are implemented. Furthermore, several transient and steady-state performance measures for Markov chains can be computed, such as state occupancy probabilities, mean time to absorption, time-averaged sojourn times and so forth. Discrete- and continuous-time Markov chains are supported. Categories: Misc Depends: octave (>= 4.0.0) Autoload: no License: GPLv3+ Url: http://www.moreno.marzolla.name/software/queueing/ queueing/COPYING0000664000175000017500000010451312762046576013340 0ustar morenomoreno GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . queueing/inst/0000775000175000017500000000000013356152316013244 5ustar morenomorenoqueueing/inst/qnmix.m0000664000175000017500000002120713356124554014563 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmix (@var{lambda}, @var{N}, @var{S}, @var{V}, @var{m}) ## ## @cindex Mean Value Analysys (MVA) ## @cindex mixed network ## ## Mean Value Analysis for mixed queueing networks. The network ## consists of @math{K} service centers (single-server or delay ## centers) and @math{C} independent customer chains. Both open and ## closed chains are possible. @var{lambda} is the vector of per-chain ## arrival rates (open classes); @var{N} is the vector of populations ## for closed chains. ## ## Class switching is @strong{not} allowed. Each customer class ## @emph{must} correspond to an independent chain. ## ## If the network is made of open or closed classes only, then this ## function calls @code{qnom} or @code{qncmmva} respectively, and ## prints a warning message. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda}(c) ## @itemx @var{N}(c) ## For each customer chain @math{c}: ## ## @itemize ## ## @item if @math{c} is a closed chain, then @code{@var{N}(c)>0} is the ## number of class @math{c} requests and @code{@var{lambda}(c)} must be ## zero; ## ## @item If @math{c} is an open chain, ## @code{@var{lambda}(c)>0} is the arrival rate of class @math{c} ## requests and @code{@var{N}(c)} must be zero; ## ## @end itemize ## ## @noindent In other words, for each class @math{c} the following must hold: ## ## @example ## (@var{lambda}(c)>0 && @var{N}(c)==0) || (@var{lambda}(c)==0 && @var{N}(c)>0) ## @end example ## ## @item @var{S}(c,k) ## mean class @math{c} service time at center @math{k}, ## @code{@var{S}(c,k) @geq{} 0}. For FCFS nodes, service times must be ## class-independent. ## ## @item @var{V}(c,k) ## average number of visits of class @math{c} customers to center ## @math{k} (@code{@var{V}(c,k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. Only single-server ## (@code{@var{m}(k)==1}) or IS (Infinite Server) nodes ## (@code{@var{m}(k)<1}) are supported. If omitted, each center is ## assumed to be of type @math{M/M/1}-FCFS. Queueing discipline for ## single-server nodes can be FCFS, PS or LCFS-PR. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(c,k) ## class @math{c} utilization at center @math{k}. ## ## @item @var{R}(c,k) ## class @math{c} response time at center @math{k}. ## ## @item @var{Q}(c,k) ## average number of class @math{c} requests at center @math{k}. ## ## @item @var{X}(c,k) ## class @math{c} throughput at center @math{k}. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. ## Sevcik, @cite{Quantitative System Performance: Computer System ## Analysis Using Queueing Network Models}, Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 7.4.3 ("Mixed Model Solution Techniques"). ## Note that in this function we compute the mean response time @math{R} ## instead of the mean residence time as in the reference. ## ## @item ## Herb Schwetman, @cite{Implementing the Mean Value Algorithm for the ## Solution of Queueing Network Models}, Technical Report ## @uref{http://docs.lib.purdue.edu/cstech/286/, CSD-TR-355}, Department ## of Computer Sciences, Purdue University, revised Feb 15, 1982. ## @end itemize ## ## @seealso{qncmmva, qncm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnmix( lambda, N, S, V, m ) if ( nargin < 4 || nargin > 5 ) print_usage(); endif isvector(lambda) || ... error( "lambda must be a vector" ); lambda = lambda(:)'; isvector(N) || ... error( "N must be a vector" ); N = N(:)'; size_equal(lambda,N) || ... error( "lambda and N must be of equal length" ); ( !any( lambda>0 & N>0 ) ) || ... error("A class cannot be open and closed at the same time. Check lambda and N" ); ( all( lambda>0 | N>0 ) ) || ... error( "A class cannot be neither open nor closed. Check lambda and N" ); size_equal(S,V) || ... error( "S and V must have the same size" ); C = length(lambda); # number of classes K = columns(S); # number of service centers rows(S) == C || ... error( "S must have %d rows", C ); if ( nargin < 5 ) m = ones(1,K); else isvector( m ) || ... error( "m must be a vector" ); m = m(:)'; size_equal(lambda,m) || ... error( "lambda and m must be of equal length" ); endif all( m<=1 ) || ... error( "This function supports single-server and delay centers only. Check m" ); if ( !any(lambda>0) ) warning( "qnmix(): There are no open classes. Using qncmmva()" ); [U R Q X] = qncmmva( N, S, V, m ); return; endif if ( !any(N>0) ) warning( "qnmix(): There are no closed classes. Using qnom()" ); [U R Q X] = qnom( lambda, S, V, m ); return; endif D = S.*V; # service demands op = find( lambda>0 ); # indexes of open networks cl = find( N>0 ); # indexes of closed networks ## Initialize results U = R = Q = X = zeros(C,K); U(op,:) = diag( lambda(op) )* D(op,:); # U(c,:) = lambda(c)*D(c,:); Uo = sum(U,1); # Total utilization for open classes on service center k ## Build closed model to solve Ncl = N(cl); Scl = S; for c=cl Scl(c,:) = Scl(c,:) ./ (1-Uo); endfor Scl = Scl(cl,:); # select only rows for closed classes Vcl = V(cl,:); [Ucl Rcl Qcl Xcl] = qncmmva(Ncl, Scl, Vcl, m ); ## Results for closed classes X(cl,:) = Xcl; Q(cl,:) = Qcl; R(cl,:) = Rcl; U(cl,:) = X(cl,:) .* D(cl,:); ## Results for open classes Qc = sum(Q(cl,:),1); i_single=find(m==1); i_multi=find(m<1); for c=op R(c,i_single) = S(c,i_single).*(1+Qc) ./ (1-Uo); # This is the Response time, _not_ the residence time R(c,i_multi) = S(c,i_multi); endfor Q(op,:) = (diag(lambda(op))*V(op,:)).*R(op,:); # Q(c,k) = lambda(c)*V(c,k)*R(c,k) ## The following is needed to avoid division by zero idx = false(size(X)); idx(op,:) = ( S(op,:)>0 & V(op,:)>0 ); X(idx) = U(idx) ./ S(idx); endfunction %!test %! lambda = [1 0 0]; %! N = [1 1 1]; %! S = V = [1 1 1; 1 1 1; 1 1 1]; %! fail( "qnmix( lambda, N, S, V)", "same time"); %! N = [0 0 1]; %! fail( "qnmix( lambda, N, S, V)", "open nor closed" ); %! N = [0 1 2]; %! m = [ 1 1 2 ]; %! fail( "qnmix( lambda, N, S, V, m)", "single-server and delay" ); %! S = V = [1 1 1; 1 1 1]; %! fail( "qnmix( lambda, N, S, V)", "rows" ); %!test %! # Example p. 148 Zahorjan et al. %! lambda = [1 1/2 0 0]; %! N = [0 0 1 1]; %! V = [1 1; 1 1; 1 1; 1 1]; %! S = [1/4 1/6; 1/2 1; 1/2 1; 1 4/3]; %! [U R Q X] = qnmix(lambda, N, S, V ); %! assert( Q(3,1), 4/19, 1e-4 ); %! assert( Q(3,2), 15/19, 1e-4 ); %! assert( Q(4,1), 5/19, 1e-4 ); %! assert( Q(4,2), 14/19, 1e-4 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! # Example 8.6 p. 345 Bolch et al. %! lambda = [0.5 0.25 0 0]; %! N = [0 0 1 1]; %! V = [2 1; 2.5 1.5; 1 0.5; 1 0.4]; %! S = [0.4 0.6; 0.8 1.6; 0.3 0.5; 0.5 0.8]; %! [U R Q X] = qnmix( lambda, N, S, V ); %! assert( U([1 2],:), [0.4 0.3; 0.5 0.6], 1e-3 ); %! assert( R([3 4],:), [4.829 6.951; 7.727 11.636], 1e-3 ); %! assert( Q([3 4],:), [0.582 0.418; 0.624 0.376], 1e-3 ); %! assert( Q([1 2],:), [8.822 5.383; 11.028 10.766], 1e-3 ); #FIXME %! assert( R([1 2],:), [8.822 10.766; 17.645 28.710], 1e-3 ); %! assert( X(3,1)/V(3,1), 0.120, 1e-3 ); %! assert( X(4,1)/V(4,1), 0.081, 1e-3 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! ## example figure 10 p. 26 Schwetman, "Implementing the Mean Value %! ## Analysis for the Solution of Queueing Network Models", Technical %! ## Report CSD-TR-355, feb 15, 1982, Purdue University. %! S = [.25 0; .25 .10]; %! V = [1 0; 1 1]; %! lambda = [1 0]; %! N = [0 3]; %! [U R Q X] = qnmix( lambda, N, S, V ); %! assert( U(1,1), .25, 1e-3 ); %! assert( X(1,1), 1.0, 1e-3 ); %! assert( [R(1,1) R(2,1) R(2,2)], [1.201 0.885 0.135], 1e-3 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law queueing/inst/qnom.m0000664000175000017500000002621613356124216014401 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{P}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{P}, @var{m}) ## ## @cindex open network, multiple classes ## @cindex multiclass network, open ## ## Exact analysis of open, multiple-class BCMP networks. The network can ## be made of @emph{single-server} queueing centers (FCFS, LCFS-PR or ## PS) or delay centers (IS). This function assumes a network with ## @math{K} service centers and @math{C} customer classes. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda}(c) ## If this function is invoked as @code{qnom(lambda, S, V, @dots{})}, ## then @code{@var{lambda}(c)} is the external arrival rate of class ## @math{c} customers (@code{@var{lambda}(c) @geq{} 0}). If this ## function is invoked as @code{qnom(lambda, S, P, @dots{})}, then ## @code{@var{lambda}(c,k)} is the external arrival rate of class ## @math{c} customers at center @math{k} (@code{@var{lambda}(c,k) ## @geq{} 0}). ## ## @item @var{S}(c,k) ## mean service time of class @math{c} customers on the service center ## @math{k} (@code{@var{S}(c,k)>0}). For FCFS nodes, mean service ## times must be class-independent. ## ## @item @var{V}(c,k) ## visit ratio of class @math{c} customers to service center @math{k} ## (@code{@var{V}(c,k) @geq{} 0 }). @strong{If you pass this argument, ## class switching is not allowed} ## ## @item @var{P}(r,i,s,j) ## probability that a class @math{r} job completing service at center ## @math{i} is routed to center @math{j} as a class @math{s} job. ## @strong{If you pass argument @var{P}, class switching is allowed}; ## however, all servers must be fixed-rate or infinite-server nodes ## (@code{@var{m}(k) @leq{} 1} for all @math{k}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. If @code{@var{m}(k) < 1}, ## enter @math{k} is a delay center (IS); otherwise it is a regular ## queueing center with @code{@var{m}(k)} servers. Default is ## @code{@var{m}(k) = 1} for all @math{k}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(c,k) ## If @math{k} is a queueing center, then @code{@var{U}(c,k)} is the ## class @math{c} utilization of center @math{k}. If @math{k} is an IS ## node, then @code{@var{U}(c,k)} is the class @math{c} @emph{traffic ## intensity} defined as @code{@var{X}(c,k)*@var{S}(c,k)}. ## ## @item @var{R}(c,k) ## class @math{c} response time at center @math{k}. The system ## response time for class @math{c} requests can be computed as ## @code{dot(@var{R}, @var{V}, 2)}. ## ## @item @var{Q}(c,k) ## average number of class @math{c} requests at center @math{k}. The ## average number of class @math{c} requests in the system @var{Qc} ## can be computed as @code{Qc = sum(@var{Q}, 2)} ## ## @item @var{X}(c,k) ## class @math{c} throughput at center @math{k}. ## ## @end table ## ## @strong{NOTES} ## ## If the function call specifies the visit ratios @var{V}, ## class switching is @strong{not} allowed. If the function call ## specifies the routing probability matrix @var{P}, then class ## switching @strong{is} allowed; however, all nodes are ## restricted to be fixed rate servers or delay centers: ## multiple-server and general load-dependent centers are not ## supported. Note that the meaning of parameter @var{lambda} is ## different from one case to the other (see below). ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. ## Sevcik, @cite{Quantitative System Performance: Computer System ## Analysis Using Queueing Network Models}, Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 7.4.1 ("Open Model Solution Techniques"). ## @end itemize ## ## @seealso{qnopen,qnos,qnomvisits} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnom( varargin ) if ( nargin < 2 || nargin > 4 ) print_usage(); endif if ( nargin == 2 || ndims(varargin{3}) == 2 ) [err lambda S V m] = qnomchkparam( varargin{:} ); else lambda = varargin{1}; ( ndims(lambda) == 2 && all( lambda(:) >= 0 ) ) || ... error( "lambda must be >= 0" ); [C,K] = size(lambda); S = varargin{2}; ( ndims(S) == 2 && size(S) == [C,K] ) || ... error( "S size mismatch (should be [%d,%d])", C, K ); P = varargin{3}; ( ndims(P) == 4 && size(P) == [C,K,C,K] ) || ... error( "P size mismatch (should be %dx%dx%dx%d)",C,K,C,K ); V = qnomvisits(P,lambda); if ( nargin < 4 ) m = ones(1,K); else m = varargin{4}; isvector(m) || ... error( "m must be a vector" ); m = m(:)'; # make m a row vector length(m) == K || ... error( "m size mismatch (should be %d, is %d)", K, length(m) ); all(m<=1) || ... error( "IF you use parameter P, m must be <= 1"); endif lambda = sum(lambda,2); # lambda(c) is the overall class c arrival rate endif [C K] = size(S); U = R = Q = X = zeros(C,K); ## NOTE; Zahorjan et al. define the class c throughput at center k as ## X(c,k) = lambda(c) * V(c,k). However, this assumes a definition of ## V(c,k) that is different from what is returned by the qnomvisits() ## function. The queueing package defines V(c,k) as the class c visit ## _ratio_ at center k (see the documentation of the queueing package ## to see the formal definition of V(c,k) as the solution of a linear ## system of equations), while Zahorjan et al. define V(c,k) as the ## _number of visits_ at center k. If you want to try the examples ## on Zahorjan with this function, you need to scale V(c,k) ## as lambda / lambda(c) * V(c,k). X = sum(lambda)*V; # X(c,k) = lambda*V(c,k); ## If there are M/M/k servers with k>=1, compute the maximum ## processing capacity m(m<1) = -1; # avoid division by zero in next line rho = X .* S * diag( 1 ./ m ); # rho(c,k) = X(c,k) * S(x,k) / m(k) [Umax kmax] = max( sum(rho,1) ); (Umax < 1) || ... error( "Processing capacity exceeded at center %d", kmax ); ## Compute utilizations (for IS nodes compute also response time and ## queue lenghts) for k=1:K for c=1:C if ( m(k) > 1 ) # M/M/m-FCFS [U(c,k)] = qsmmm( X(c,k), 1/S(c,k), m(k) ); elseif ( m(k) == 1 ) # M/M/1 or -/G/1-PS [U(c,k)] = qsmm1( X(c,k), 1/S(c,k) ); else # -/G/inf [U(c,k) R(c,k) Q(c,k)] = qsmminf( X(c,k), 1/S(c,k) ); endif endfor endfor assert( sum(U,1) < 1 ); # sanity check ## Adjust response times and queue lengths for FCFS queues k_fcfs = find(m>=1); for c=1:C Q(c,k_fcfs) = U(c,k_fcfs) ./ ( 1 - sum(U(:,k_fcfs),1) ); R(c,k_fcfs) = Q(c,k_fcfs) ./ X(c,k_fcfs); # Use Little's law endfor endfunction %!test %! fail( "qnom([1 1], [.9; 1.0])", "exceeded at center 1"); %! fail( "qnom([1 1], [0.9 .9; 0.9 1.0])", "exceeded at center 2"); %! #qnom([1 1], [.9; 1.0],[],2); # should not fail, M/M/2-FCFS %! #qnom([1 1], [.9; 1.0],[],-1); # should not fail, -/G/1-PS %! fail( "qnom(1./[2 3], [1.9 1.9 0.9; 2.9 3.0 2.9])", "exceeded at center 2"); %! #qnom(1./[2 3], [1 1.9 0.9; 0.3 3.0 1.5],[],[1 2 1]); # should not fail %!test %! V = [1 1; 1 1]; %! S = [1 3; 2 4]; %! lambda = [3/19 2/19]; %! [U R Q X] = qnom(lambda, S, diag( lambda / sum(lambda) ) * V ); %! assert( U(1,1), 3/19, 1e-6 ); %! assert( U(2,1), 4/19, 1e-6 ); %! assert( R(1,1), 19/12, 1e-6 ); %! assert( R(1,2), 57/2, 1e-6 ); %! assert( Q(1,1), .25, 1e-6 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! # example p. 138 Zahorjan et al. %! V = [ 10 9; 5 4]; %! S = [ 1/10 1/3; 2/5 1]; %! lambda = [3/19 2/19]; %! [U R Q X] = qnom(lambda, S, diag( lambda / sum(lambda) ) * V ); %! assert( X(1,1), 1.58, 1e-2 ); %! assert( U(1,1), .158, 1e-3 ); %! assert( R(1,1), .158, 1e-3 ); # modified from the original example, as the reference above considers R as the residence time, not the response time %! assert( Q(1,1), .25, 1e-2 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! # example 7.7 p. 304 Bolch et al. Please note that the book uses the %! # notation P(i,r,j,s) (i,j are service centers, r,s are job %! # classes) while the queueing package uses P(r,i,s,j) %! P = zeros(2,3,2,3); %! lambda = S = zeros(2,3); %! P(1,1,1,2) = 0.4; %! P(1,1,1,3) = 0.3; %! P(1,2,1,1) = 0.6; %! P(1,2,1,3) = 0.4; %! P(1,3,1,1) = 0.5; %! P(1,3,1,2) = 0.5; %! P(2,1,2,2) = 0.3; %! P(2,1,2,3) = 0.6; %! P(2,2,2,1) = 0.7; %! P(2,2,2,3) = 0.3; %! P(2,3,2,1) = 0.4; %! P(2,3,2,2) = 0.6; %! S(1,1) = 1/8; %! S(1,2) = 1/12; %! S(1,3) = 1/16; %! S(2,1) = 1/24; %! S(2,2) = 1/32; %! S(2,3) = 1/36; %! lambda(1,1) = lambda(2,1) = 1; %! V = qnomvisits(P,lambda); %! assert( V, [ 3.333 2.292 1.917; 10 8.049 8.415] ./ 2, 1e-3); %! [U R Q X] = qnom(sum(lambda,2), S, V); %! assert( sum(U,1), [0.833 0.442 0.354], 1e-3 ); %! # Note: the value of K_22 (corresponding to Q(2,2)) reported in the book %! # is 0.5. However, hand computation using the exact same formulas %! # from the book produces a different value, 0.451 %! assert( Q, [2.5 0.342 0.186; 2.5 0.451 0.362], 1e-3 ); ## Check that the results of qnom_nocs and qnom_cs are the same ## for multiclass networks WITHOUT class switching. %!test %! P = zeros(2,2,2,2); %! P(1,1,1,2) = 0.8; P(1,2,1,1) = 1; %! P(2,1,2,2) = 0.9; P(2,2,2,1) = 1; %! S = zeros(2,2); %! S(1,1) = 1.5; S(1,2) = 1.2; %! S(2,1) = 0.8; S(2,2) = 2.5; %! lambda = zeros(2,2); %! lambda(1,1) = 1/20; %! lambda(2,1) = 1/30; %! [U1 R1 Q1 X1] = qnom(lambda, S, P); # qnom_cs %! [U2 R2 Q2 X2] = qnom(sum(lambda,2), S, qnomvisits(P,lambda)); # qnom_nocs %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %! assert( X1, X2, 1e-5 ); %!demo %! P = zeros(2,2,2,2); %! lambda = zeros(2,2); %! S = zeros(2,2); %! P(1,1,2,1) = P(1,2,2,1) = 0.2; %! P(1,1,2,2) = P(2,2,2,2) = 0.8; %! S(1,1) = S(1,2) = 0.1; %! S(2,1) = S(2,2) = 0.05; %! rr = 1:100; %! Xk = zeros(2,length(rr)); %! for r=rr %! lambda(1,1) = lambda(1,2) = 1/r; %! [U R Q X] = qnom(lambda,S,P); %! Xk(:,r) = sum(X,1)'; %! endfor %! plot(rr,Xk(1,:),";Server 1;","linewidth",2, ... %! rr,Xk(2,:),";Server 2;","linewidth",2); %! legend("boxoff"); %! xlabel("Class 1 interarrival time"); %! ylabel("Throughput"); queueing/inst/dtmcbd.m0000664000175000017500000000717113356103740014662 0ustar morenomoreno## Copyright (C) 2012, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{P} =} dtmcbd (@var{b}, @var{d}) ## ## @cindex Markov chain, discrete time ## @cindex DTMC ## @cindex discrete time Markov chain ## @cindex birth-death process, DTMC ## ## Returns the transition probability matrix @math{P} for a discrete ## birth-death process over state space @math{1, @dots{}, N}. ## For each @math{i=1, @dots{}, N-1}, ## @code{@var{b}(i)} is the transition probability from state ## @math{i} to state @math{i+1}, and @code{@var{d}(i)} is the transition ## probability from state @math{i+1} to state @math{i}. ## ## Matrix @math{\bf P} is therefore defined as: ## ## @tex ## $$ \pmatrix{ (1-\lambda_1) & \lambda_1 & & & & \cr ## \mu_1 & (1 - \mu_1 - \lambda_2) & \lambda_2 & & \cr ## & \mu_2 & (1 - \mu_2 - \lambda_3) & \lambda_3 & & \cr ## \cr ## & & \ddots & \ddots & \ddots & & \cr ## \cr ## & & & \mu_{N-2} & (1 - \mu_{N-2}-\lambda_{N-1}) & \lambda_{N-1} \cr ## & & & & \mu_{N-1} & (1-\mu_{N-1}) } ## $$ ## @end tex ## @ifnottex ## @example ## @group ## / \ ## | 1-b(1) b(1) | ## | d(1) (1-d(1)-b(2)) b(2) | ## | d(2) (1-d(2)-b(3)) b(3) | ## | | ## | ... ... ... | ## | | ## | d(N-2) (1-d(N-2)-b(N-1)) b(N-1) | ## | d(N-1) 1-d(N-1) | ## \ / ## @end group ## @end example ## @end ifnottex ## ## @noindent where @math{\lambda_i} and @math{\mu_i} are the birth and ## death probabilities, respectively. ## ## @seealso{ctmcbd} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function P = dtmcbd( b, d ) if ( nargin != 2 ) print_usage(); endif ( isvector( b ) && isvector( d ) ) || ... error( "birht and death must be vectors" ); b = b(:); # make b a column vector d = d(:); # make d a column vector size_equal( b, d ) || ... error( "birth and death vectors must have the same length" ); all( b >= 0 ) || ... error( "birth probabilities must be >= 0" ); all( d >= 0 ) || ... error( "death probabilities must be >= 0" ); all( ([b; 0] + [0; d]) <= 1 ) || ... error( "d(i)+b(i+1) must be <= 1"); P = diag( b, 1 ) + diag( d, -1 ); P += diag( 1-sum(P,2) ); endfunction %!test %! birth = [.5 .5 .3]; %! death = [.6 .2 .3]; %! fail("dtmcbd(birth,death)","must be"); %!demo %! birth = [ .2 .3 .4 ]; %! death = [ .1 .2 .3 ]; %! P = dtmcbd( birth, death ); %! disp(P) queueing/inst/dtmcmtta.m0000664000175000017500000001705413356107663015253 0ustar morenomoreno## Copyright (C) 2012, 2014, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{t} @var{N} @var{B}] =} dtmcmtta (@var{P}) ## @deftypefnx {Function File} {[@var{t} @var{N} @var{B}] =} dtmcmtta (@var{P}, @var{p0}) ## ## @cindex mean time to absorption, DTMC ## @cindex absorption probabilities, DTMC ## @cindex fundamental matrix ## @cindex DTMC ## @cindex discrete time Markov chain ## @cindex Markov chain, discrete time ## ## Compute the expected number of steps before absorption for a ## DTMC with state space @math{@{1, @dots{} N@}} ## and transition probability matrix @var{P}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## @math{N \times N} transition probability matrix. ## @code{@var{P}(i,j)} is the transition probability from state ## @math{i} to state @math{j}. ## ## @item @var{p0}(i) ## Initial state occupancy probabilities (vector of length @math{N}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{t} ## @itemx @var{t}(i) ## When called with a single argument, @var{t} is a vector of length ## @math{N} such that @code{@var{t}(i)} is the expected number of steps ## before being absorbed in any absorbing state, starting from state ## @math{i}; if @math{i} is absorbing, @code{@var{t}(i) = 0}. When ## called with two arguments, @var{t} is a scalar, and represents the ## expected number of steps before absorption, starting from the initial ## state occupancy probability @var{p0}. ## ## @item @var{N}(i) ## @itemx @var{N}(i,j) ## When called with a single argument, @var{N} is the @math{N \times N} ## fundamental matrix for @var{P}. @code{@var{N}(i,j)} is the expected ## number of visits to transient state @var{j} before absorption, if the ## system started in transient state @var{i}. The initial state is counted ## if @math{i = j}. When called with two arguments, @var{N} is a vector ## of length @math{N} such that @code{@var{N}(j)} is the expected number ## of visits to transient state @var{j} before absorption, given initial ## state occupancy probability @var{P0}. ## ## @item @var{B}(i) ## @itemx @var{B}(i,j) ## When called with a single argument, @var{B} is a @math{N \times N} ## matrix where @code{@var{B}(i,j)} is the probability of being ## absorbed in state @math{j}, starting from transient state @math{i}; ## if @math{j} is not absorbing, @code{@var{B}(i,j) = 0}; if @math{i} ## is absorbing, @code{@var{B}(i,i) = 1} and @code{@var{B}(i,j) = 0} ## for all @math{i \neq j}. When called with two arguments, @var{B} is ## a vector of length @math{N} where @code{@var{B}(j)} is the ## probability of being absorbed in state @var{j}, given initial state ## occupancy probabilities @var{p0}. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item Grinstead, Charles M.; Snell, J. Laurie (July ## 1997). @cite{Introduction to Probability}, Ch. 11: Markov ## Chains. American Mathematical Society. ISBN 978-0821807491. ## @end itemize ## ## @seealso{ctmcmtta} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [t N B] = dtmcmtta( P, p0 ) persistent epsilon = 10*eps; if ( nargin < 1 || nargin > 2 ) print_usage(); endif [K err] = dtmcchkP(P); (K>0) || ... error(err); if ( nargin == 2 ) ( isvector(p0) && length(p0) == K && all(p0>=0) && abs(sum(p0)-1.0). ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosaba (@var{lambda}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosaba (@var{lambda}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosaba (@var{lambda}, @var{S}, @var{V}, @var{m}) ## ## @cindex bounds, asymptotic ## @cindex open network ## ## Compute Asymptotic Bounds for open, single-class networks with @math{K} service centers. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate of requests (scalar, @code{@var{lambda} @geq{} 0}). ## ## @item @var{D}(k) ## service demand at center @math{k}. ## (vector of length @math{K}, @code{@var{D}(k) @geq{} 0}). ## ## @item @var{S}(k) ## mean service time at center @math{k}. ## (vector of length @math{K}, @code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## mean number of visits to center @math{k}. ## (vector of length @math{K}, @code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. ## This function only supports @math{M/M/1} queues, therefore ## @var{m} must be @code{ones(size(S))}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl} ## @item @var{Xu} ## Lower and upper bounds on the system throughput. @var{Xl} is ## always set to @math{0} since there can be no lower bound on the ## throughput of open networks (scalar). ## ## @item @var{Rl} ## @item @var{Ru} ## Lower and upper bounds on the system response time. @var{Ru} ## is always set to @code{+inf} since there can be no upper bound on the ## throughput of open networks (scalar). ## ## @end table ## ## @seealso{qnomaba} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper R_lower R_upper] = qnosaba( varargin ) if ( nargin < 2 || nargin > 4 ) print_usage(); endif [err lambda S V m] = qnoschkparam( varargin{:} ); isempty(err) || error(err); all(m==1) || ... error("this function supports M/M/1 servers only"); D = S .* V; X_lower = 0; X_upper = 1/max(D); R_lower = sum(D); R_upper = +inf; endfunction %!test %! fail( "qnosaba( 0.1, [] )", "vector" ); %! fail( "qnosaba( 0.1, [0 -1])", "nonnegative" ); %! fail( "qnosaba( 0, [1 2] )", "lambda" ); %! fail( "qnosaba( -1, [1 2])", "lambda" ); %! fail( "qnosaba( 1, [1 2 3], [1 2] )", "incompatible size"); %! fail( "qnosaba( 1, [1 2 3], [-1 2 3] )", "nonnegative"); %!test %! [Xl Xu Rl Ru] = qnosaba( 1, [1 1] ); %! assert( Xl, 0 ); %! assert( Ru, +inf ); queueing/inst/ctmc_fpt.m0000664000175000017500000000301112762046576015226 0ustar morenomoreno## Copyright (C) 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} ctmc_fpt (@var{Q}) ## @deftypefnx {Function File} {@var{m} =} ctmc_fpt (@var{Q}, @var{i}, @var{j}) ## ## This function is deprecated. Please use @code{ctmcfpt} instead. ## ## @seealso{ctmcfpt} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function result = ctmc_fpt( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "ctmc_fpt is deprecated. Please use ctmcfpt instead"); endif result = ctmcfpt( varargin{:} ); endfunction %!test %! N = 10; %! Q = reshape(1:N^2,N,N); %! Q(1:N+1:end) = 0; %! Q -= diag(sum(Q,2)); %! M = ctmc_fpt(Q); %! assert( all(diag(M) < 10*eps) ); queueing/inst/qncmvisits.m0000664000175000017500000002223212762345756015637 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{V} @var{ch}] =} qncmvisits (@var{P}) ## @deftypefnx {Function File} {[@var{V} @var{ch}] =} qncmvisits (@var{P}, @var{r}) ## ## Compute the average number of visits to the service centers of a closed multiclass network with @math{K} service centers and @math{C} customer classes. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(r,i,s,j) ## probability that a ## class @math{r} request which completed service at center @math{i} is ## routed to center @math{j} as a class @math{s} request. Class switching ## is allowed. ## ## @item @var{r}(c) ## index of class @math{c} reference station, ## @math{r(c) \in @{1, @dots{}, K@}}, @math{1 @leq{} c @leq{} C}. ## The class @math{c} visit count to server @code{@var{r}(c)} ## (@code{@var{V}(c,r(c))}) is conventionally set to 1. The reference ## station serves two purposes: (i) its throughput is assumed to be the ## system throughput, and (ii) a job returning to the reference station ## is assumed to have completed one cycle. Default is to consider ## station 1 as the reference station for all classes. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{V}(c,i) ## number of visits of class @math{c} requests at center @math{i}. ## ## @item @var{ch}(c) ## chain number that class @math{c} belongs ## to. Different classes can belong to the same chain. Chains are ## numbered sequentially starting from 1 (@math{1, 2, @dots{}}). The ## total number of chains is @code{max(@var{ch})}. ## ## @end table ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [V chains] = qncmvisits( P, r ) if ( nargin < 1 || nargin > 2 ) print_usage(); endif ndims(P) == 4 || ... error("P must be a 4-dimensional matrix"); [C, K, C2, K2] = size( P ); (K == K2 && C == C2) || ... error( "P must be a [C,K,C,K] matrix"); if ( nargin < 2) r = ones(1,C); else isvector(r) && length(r) == C || ... error("r must be a vector with %d elements",C); all( r>=1 && r<=K ) || ... error("elements in r must be in the range 1 - %d",K); r = r(:)'; endif ## solve the traffic equations: V(s,j) = sum_r sum_i V(r,i) * ## P(r,i,s,j), for all s,j V(s,r(s)) = 1 for all s. A = reshape(P,[K*C K*C])-eye(K*C); b = zeros(1,K*C); CH = __scc(reshape(P,[C*K C*K])>0); nCH = max(CH); # number of chains CH = reshape(CH,C,K); # CH(c,k) is the chain that class c at center k belongs to chains = zeros(1,C); for k=1:K for c=1:C if ( chains(c) == 0 ) chains(c) = CH(c,k); else ( CH(c,k) == 0 || chains(c) == CH(c,k) ) || ... error("Class %d belongs to different chains",c); endif endfor endfor constraints = zeros(1,nCH); # constraint(cc) = 1 iff we set a constraint for a class belonging to chain cc; we only set one constraint per chain for c=1:C cc = CH(c,r(c)); if ( cc == 0 || constraints(cc) == 0 ) ii = sub2ind([C K],c,r(c)); A(:,ii) = 0; A(ii,ii) = 1; if ( cc > 0 ) ## if r(c) is not an isolated node constraints(cc) = 1; b(ii) = 1; endif endif endfor V = reshape(b/A, C, K); ## Make sure that no negative values appear (sometimes, numerical ## errors produce tiny negative values instead of zeros) V = max(0,V); endfunction %!test %! %! ## Closed, multiclass network %! %! C = 2; K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,1) = 1; %! P(2,1,2,3) = 1; %! P(2,3,2,1) = 1; %! V = qncmvisits(P); %! for c=1:C %! for k=1:K %! assert(V(c,k), sum(sum(V .* P(:,:,c,k))), 1e-5); %! endfor %! endfor %!test %! %! ## Test multiclass network. Example from Schwetman (figure 7, page 9 of %! ## http://docs.lib.purdue.edu/cstech/259/ %! ## "Testing network-of-queues software, technical report CSD-TR 330, %! ## Purdue University). %! %! C = 2; K = 4; %! P = zeros(C,K,C,K); %! # class 1 routing %! P(1,1,1,1) = .05; %! P(1,1,1,2) = .45; %! P(1,1,1,3) = .5; %! P(1,2,1,1) = 1; %! P(1,3,1,1) = 1; %! # class 2 routing %! P(2,1,2,1) = .01; %! P(2,1,2,3) = .5; %! P(2,1,2,4) = .49; %! P(2,3,2,1) = 1; %! P(2,4,2,1) = 1; %! V = qncmvisits(P); %! for c=1:C %! for i=1:K %! assert(V(c,i), sum(sum(V .* P(:,:,c,i))), 1e-5); %! endfor %! endfor %!test %! %! ## Network with class switching. %! ## This is example in figure 9 of %! ## Schwetman, "Implementing the Mean Value Analysis %! ## Algorithm fort the solution of Queueing Network Models", Technical %! ## Report CSD-TR-355, Department of Computer Science, Purdue Univrsity, %! ## Feb 15, 1982, http://docs.lib.purdue.edu/cstech/286/ %! %! C = 2; K = 3; %! S = [.01 .07 .10; ... %! .05 0.7 .10 ]; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = .7; %! P(1,1,1,3) = .2; %! P(1,1,2,1) = .1; %! P(2,1,2,2) = .3; %! P(2,1,2,3) = .5; %! P(2,1,1,1) = .2; %! P(1,2,1,1) = P(1,3,1,1) = 1; %! P(2,2,2,1) = P(2,3,2,1) = 1; %! N = [3 0]; %! V = qncmvisits(P); %! VV = [10 7 2; 5 1.5 2.5]; # result given in Schwetman; our function computes something different, but that's ok since visit counts are actually ratios %! assert( V ./ repmat(V(:,1),1,K), VV ./ repmat(VV(:,1),1,K), 1e-5 ); %!test %! %! ## two disjoint classes: must produce two disjoing chains %! %! C = 2; K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,1) = 1; %! P(2,1,2,3) = 1; %! P(2,3,2,1) = 1; %! [nc r] = qncmvisits(P); %! assert( r(1) != r(2) ); %!test %! %! ## two classes, one chain %! %! C = 2; K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = .5; %! P(1,2,2,1) = 1; %! P(2,1,2,3) = .5; %! P(2,3,1,1) = 1; %! [nc r] = qncmvisits(P); %! assert( r(1) == r(2) ); %!test %! %! ## a "Moebius strip". Note that this configuration is invalid, and %! ## therefore our algorithm must raise an error. This is because this %! ## network has two chains, but both chains contain both classes %! %! C = 2; K = 2; %! P = zeros(C,K,C,K); %! P(1,1,2,2) = 1; %! P(2,2,1,1) = 1; %! P(2,1,1,2) = 1; %! P(1,2,2,1) = 1; %! fail( "qncmvisits(P)", "different"); %!test %! %! ## Network with two classes representing independent chains. %! ## This is example in figure 8 of %! ## Schwetman, "Implementing the Mean Value Analysis %! ## Algorithm fort the solution of Queueing Network Models", Technical %! ## Report CSD-TR-355, Department of Computer Science, Purdue Univrsity, %! ## Feb 15, 1982, http://docs.lib.purdue.edu/cstech/286/ %! %! C = 2; K = 2; %! P = zeros(C,K,C,K); %! P(1,1,1,3) = P(1,3,1,1) = 1; %! P(2,2,2,3) = P(2,3,2,2) = 1; %! V = qncmvisits(P,[1,2]); %! assert( V, [1 0 1; 0 1 1], 1e-5 ); %!test %! C = 2; %! K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,3) = 1; %! P(1,3,2,2) = 1; %! P(2,2,1,1) = 1; %! [V ch] = qncmvisits(P); %! assert( ch, [1 1] ); ## The following transition probability matrix is not well formed: note ## that there is an outgoing transition from center 1, class 1 but not ## incoming transition. %!test %! C = 2; %! K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,3) = 1; %! P(1,3,2,2) = 1; %! P(2,2,2,1) = 1; %! P(2,1,1,2) = 1; %! [V ch] = qncmvisits(P); %! assert( ch, [1 1] ); ## compute strongly connected components using Kosaraju's algorithm, ## which requires two DFS visits. A better solution would be to use ## Tarjan's algorithm. ## ## In this implementation, an isolated node without self loops will NOT ## belong to any SCC. Although this is not formally correct from the ## graph theoretic point of view, it is necessary to compute chains ## correctly. function s = __scc(G) assert(issquare(G)); N = rows(G); GF = (G>0); GB = (G'>0); s = zeros(N,1); c=1; for n=1:N if (s(n) == 0) fw = __dfs(GF,n); bw = __dfs(GB,n); r = (fw & bw); if (any(r)) s(r) = c++; endif endif endfor endfunction ## Executes a dfs visit on graph G, starting from source node s function v = __dfs(G, s) assert( issquare(G) ); N = rows(G); v = stack = zeros(1,N); ## v(i) == 1 iff node i has been visited q = 1; # first empty slot in queue stack(q++) = s; ## Note: node s is NOT marked as visited; it will me marked as visited ## only if we visit it again. This is necessary to ensure that ## isolated nodes without self loops will not belong to any SCC. while( q>1 ) n = stack(--q); ## explore neighbors of n: all f in G(n,:) such that v(f) == 0 ## The following instruction is equivalent to: ## for f=find(G(n,:)) ## if ( v(f) == 0 ) for f = find ( G(n,:) & (v==0) ) stack(q++) = f; v(f) = 1; endfor endwhile endfunction queueing/inst/dtmc_taexps.m0000664000175000017500000000301712762046576015750 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{L} =} dtmc_taexps (@var{P}, @var{n}, @var{p0}) ## @deftypefnx {Function File} {@var{L} =} dtmc_taexps (@var{P}, @var{p0}) ## ## This function is deprecated. Please use @code{dtmctaexps} instead. ## ## @code{dtmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function M = dtmc_taexps( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_taexps is deprecated. Please use dtmctaexps instead"); endif M = dtmctaexps( varargin{:} ); endfunction %!test %! P = dtmc_bd([1 1 1 1], [0 0 0 0]); %! p0 = [1 0 0 0 0]; %! L = dtmc_taexps(P,p0); %! assert( L, [.25 .25 .25 .25 0], 10*eps ); queueing/inst/qncspb.m0000664000175000017500000001167013356123261014712 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{D} ) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{S}, @var{V} ) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{S}, @var{V}, @var{m} ) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z} ) ## ## @cindex bounds, PB ## @cindex PB bounds ## @cindex closed network, single class ## ## Compute PB Bounds (C. H. Hsieh and S. Lam, 1987) for single-class, ## closed networks with @math{K} service centers. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{} ## number of requests in the system (scalar, @code{@var{N} > 0}). ## ## @item @var{D}(k) ## service demand of service center @math{k} (@code{@var{D}(k) @geq{} 0}). ## ## @item @var{S}(k) ## mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## visit ratio to center @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. This function only supports ## @math{M/M/1} queues, therefore @var{m} must be ## @code{ones(size(S))}. ## ## @item @var{Z} ## external delay (think time, @code{@var{Z} @geq{} 0}). Default 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl} ## @itemx @var{Xu} ## Lower and upper bounds on the system throughput. ## ## @item @var{Rl} ## @itemx @var{Ru} ## Lower and upper bounds on the system response time. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## C. H. Hsieh and S. Lam, @cite{Two classes of performance bounds for ## closed queueing networks}, Performance Evaluation, Vol. 7 Issue 1, ## pp. 3--30, February 1987, DOI ## @uref{http://dx.doi.org/10.1016/0166-5316(87)90054-X, ## 10.1016/0166-5316(87)90054-X}. Also available as ## @uref{ftp://ftp.cs.utexas.edu/pub/techreports/tr85-09.pdf, Technical ## Report TR-85-09}, Department of Computer Science, University of Texas ## at Austin, June 1985 ## @end itemize ## ## This function implements the non-iterative variant described in G. ## Casale, R. R. Muntz, G. Serazzi, @cite{Geometric Bounds: a ## Non-Iterative Analysis Technique for Closed Queueing Networks}, IEEE ## Transactions on Computers, 57(6):780-794, June 2008. ## ## @seealso{qncsaba, qbcsbsb, qncsgb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper R_lower R_upper] = qncspb( varargin ) if ( nargin < 2 || nargin > 5 ) print_usage(); endif [err N S V m Z] = qncschkparam( varargin{:} ); isempty(err) || error(err); ( N>0 ) || ... error("N must be positive"); all(m==1) || ... error("qncspb only supports single server nodes"); D = S .* V; D_tot = sum(D); X_max = 1/max(D); X_min = 0; X_lower = N/( Z + D_tot + ... ( sum( D .^ N * (N-1-Z*X_min) ) / sum( D .^ (N-1) ) ) ); X_upper = N/( Z + D_tot + ... ( sum( D .^ 2 * (N-1-Z*X_max) ) / sum( D ) ) ); X_upper = min( X_upper, X_max ); # cap X upper bound to 1/max(D) R_lower = N/X_upper-Z; R_upper = N/X_lower-Z; endfunction %!test %! fail( "qncspb( 1, [] )", "vector" ); %! fail( "qncspb( 1, [0 -1])", "nonnegative" ); %! fail( "qncspb( 0, [1 2] )", "positive" ); %! fail( "qncspb( -1, [1 2])", "nonnegative" ); %! fail( "qncspb( 1, [1 2], [1,1], [2, 2])", "single server" ); %! fail( "qncspb( 1, [1 2], [1,1], [1, 1], -1)", "nonnegative" ); %!# shared test function %!function test_pb( D, expected, Z=0 ) %! for i=1:rows(expected) %! N = expected(i,1); %! [X_lower X_upper] = qncspb(N,D,ones(size(D)),ones(size(D)),Z); %! X_exp_lower = expected(i,2); %! X_exp_upper = expected(i,3); %! assert( [N X_lower X_upper], [N X_exp_lower X_exp_upper], 1e-4 ) %! endfor %!test %! # table IV %! D = [ 0.1 0.1 0.09 0.08 ]; %! # N X_lower X_upper %! expected = [ 2 4.3174 4.3174; ... %! 5 6.6600 6.7297; ... %! 10 8.0219 8.2700; ... %! 20 8.8672 9.3387; ... %! 80 9.6736 10.000 ]; %! test_pb(D, expected); queueing/inst/qnopen.m0000664000175000017500000000427112762046576014740 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnopen (@var{lambda}, @var{S}, @var{V}, @dots{}) ## ## @cindex open network ## ## Compute utilization, response time, average number of requests in the ## system, and throughput for open queueing networks. If @var{lambda} is ## a scalar, the network is considered a single-class QN and is solved ## using @code{qnopensingle}. If @var{lambda} is a vector, the network ## is considered as a multiclass QN and solved using @code{qnopenmulti}. ## ## @seealso{qnos, qnom} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnopen( lambda, S, V, varargin ) if ( nargin < 3 ) print_usage(); endif if ( isscalar(lambda) ) [U R Q X] = qnos(lambda, S, V, varargin{:}); else [U R Q X] = qnom(lambda, S, V, varargin{:}); endif endfunction %!test %! # Example 34.1 p. 572 %! lambda = 3; %! V = [16 7 8]; %! S = [0.01 0.02 0.03]; %! [U R Q X] = qnopen( lambda, S, V ); %! assert( R, [0.0192 0.0345 0.107], 1e-2 ); %! assert( U, [0.48 0.42 0.72], 1e-2 ); %!test %! V = [1 1; 1 1]; %! S = [1 3; 2 4]; %! lambda = [3/19 2/19]; %! [U R Q] = qnopen(lambda, S, diag( lambda / sum(lambda) ) * V); %! assert( U(1,1), 3/19, 1e-6 ); %! assert( U(2,1), 4/19, 1e-6 ); %! assert( R(1,1), 19/12, 1e-6 ); %! assert( R(1,2), 57/2, 1e-6 ); %! assert( Q(1,1), .25, 1e-6 ); queueing/inst/qsmg1.m0000664000175000017500000000532013123252506014444 0ustar morenomoreno## Copyright (C) 2009 Dmitry Kolesnikov ## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmg1 (@var{lambda}, @var{xavg}, @var{x2nd}) ## ## @cindex @math{M/G/1} system ## ## Compute utilization, response time, average number of requests and ## throughput for a @math{M/G/1} system. The service time distribution ## is described by its mean @var{xavg}, and by its second moment ## @var{x2nd}. The computations are based on results from L. Kleinrock, ## @cite{Queuing Systems}, Wiley, Vol 2, and Pollaczek-Khinchine formula. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate ## ## @item @var{xavg} ## Average service time ## ## @item @var{x2nd} ## Second moment of service time distribution ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Service center utilization ## ## @item @var{R} ## Service center response time ## ## @item @var{Q} ## Average number of requests in the system ## ## @item @var{X} ## Service center throughput ## ## @item @var{p0} ## Probability that there is not any request at system ## ## @end table ## ## @var{lambda}, @var{xavg}, @var{t2nd} can be vectors of the ## same size. In this case, the results will be vectors as well. ## ## @seealso{qsmh1} ## ## @end deftypefn ## Author: Dmitry Kolesnikov function [U R Q X p0] = qsmg1(lambda, xavg, x2nd) if ( nargin != 3 ) print_usage(); endif ## bring the parameters to a common size [ err lambda xavg x2nd ] = common_size( lambda, xavg, x2nd ); if ( err ) error( "parameters are of incompatible size" ); endif mu = 1 ./ xavg; rho = lambda ./ mu; #coefficient of variation Cx = (x2nd .- xavg .* xavg) ./ (xavg .* xavg); #PK mean formula(s) Q = rho .+ rho .* rho .* (1 .+ Cx) ./ (2 .* (1 .- rho)); R = xavg .+ xavg .* rho .* (1 .+ Cx) ./ (2 .* (1 .- rho)); p0 = exp(-rho); #General Results #utilization U = rho; X = lambda; endfunction queueing/inst/ctmc.m0000664000175000017500000002216013356111023014337 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{p} =} ctmc (@var{Q}) ## @deftypefnx {Function File} {@var{p} =} ctmc (@var{Q}, @var{t}. @var{p0}) ## ## @cindex Markov chain, continuous time ## @cindex continuous time Markov chain ## @cindex Markov chain, state occupancy probabilities ## @cindex stationary probabilities ## @cindex CTMC ## ## Compute stationary or transient state occupancy probabilities for a continuous-time Markov chain. ## ## With a single argument, compute the stationary state occupancy ## probabilities @math{@var{p}(1), @dots{}, @var{p}(N)} for a ## continuous-time Markov chain with finite state space @math{@{1, @dots{}, ## N@}} and @math{N \times N} infinitesimal generator matrix @var{Q}. ## With three arguments, compute the state occupancy probabilities ## @math{@var{p}(1), @dots{}, @var{p}(N)} that the system is in state @math{i} ## at time @var{t}, given initial state occupancy probabilities ## @math{@var{p0}(1), @dots{}, @var{p0}(N)} at time 0. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{Q}(i,j) ## Infinitesimal generator matrix. @var{Q} is a @math{N \times N} square ## matrix where @code{@var{Q}(i,j)} is the transition rate from state ## @math{i} to state @math{j}, for @math{1 @leq{} i \neq j @leq{} N}. ## @var{Q} must satisfy the property that @math{\sum_{j=1}^N Q_{i, j} = ## 0} ## ## @item @var{t} ## Time at which to compute the transient probability (@math{t @geq{} ## 0}). If omitted, the function computes the steady state occupancy ## probability vector. ## ## @item @var{p0}(i) ## probability that the system is in state @math{i} at time 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{p}(i) ## If this function is invoked with a single argument, @code{@var{p}(i)} ## is the steady-state probability that the system is in state @math{i}, ## @math{i = 1, @dots{}, N}. If this function is invoked with three ## arguments, @code{@var{p}(i)} is the probability that the system is in ## state @math{i} at time @var{t}, given the initial occupancy ## probabilities @var{p0}(1), @dots{}, @var{p0}(N). ## ## @end table ## ## @seealso{dtmc} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function q = ctmc( Q, t, p0 ) persistent epsilon = 10*eps; if ( nargin != 1 && nargin != 3 ) print_usage(); endif [N err] = ctmcchkQ(Q); ( N>0 ) || ... error(err); if ( nargin == 1 ) # steady-state analysis ## non zero columns nonzero=find( any(abs(Q)>epsilon,1 ) ); if ( length(nonzero) == 0 ) error( "Q is the zero matrix" ); endif normcol = nonzero(1); # normalization condition column ## force probability of unvisited states to zero for i=find( all(abs(Q)=0 ) || ... error("t must be a scalar >= 0"); ( isvector(p0) && length(p0) == N && all(p0>=0) && abs(sum(p0)-1.0). ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsmva (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsmva (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsmva (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## ## @cindex Mean Value Analysys (MVA) ## @cindex closed network, single class ## @cindex normalization constant ## ## Analyze closed, single class queueing networks using the exact Mean Value Analysis (MVA) algorithm. ## ## The following queueing disciplines are supported: FCFS, LCFS-PR, PS ## and IS (Infinite Server). This function supports fixed-rate service ## centers or multiple server nodes. For general load-dependent service ## centers, use the function @code{qncsmvald} instead. ## ## Additionally, the normalization constant @math{G(n)}, @math{n=0, ## @dots{}, N} is computed; @math{G(n)} can be used in conjunction with ## the BCMP theorem to compute steady-state probabilities. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## Population size (number of requests in the system, @code{@var{N} @geq{} 0}). ## If @code{@var{N} == 0}, this function returns ## @code{@var{U} = @var{R} = @var{Q} = @var{X} = 0} ## ## @item @var{S}(k) ## mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## average number of visits to service center @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{Z} ## External delay for customers (@code{@var{Z} @geq{} 0}). Default is 0. ## ## @item @var{m}(k) ## number of servers at center @math{k} (if @var{m} is a scalar, all ## centers have that number of servers). If @code{@var{m}(k) < 1}, ## center @math{k} is a delay center (IS); otherwise it is a regular ## queueing center (FCFS, LCFS-PR or PS) with @code{@var{m}(k)} ## servers. Default is @code{@var{m}(k) = 1} for all @math{k} (each ## service center has a single server). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## If @math{k} is a FCFS, LCFS-PR or PS node (@code{@var{m}(k) @geq{} ## 1}), then @code{@var{U}(k)} is the utilization of center @math{k}, ## @math{0 @leq{} U(k) @leq{} 1}. If @math{k} is an IS node ## (@code{@var{m}(k) < 1}), then @code{@var{U}(k)} is the @emph{traffic ## intensity} defined as @code{@var{X}(k)*@var{S}(k)}. In this case the ## value of @code{@var{U}(k)} may be greater than one. ## ## @item @var{R}(k) ## center @math{k} response time. The @emph{Residence Time} at center ## @math{k} is @code{@var{R}(k) * @var{V}(k)}. The system response ## time @var{Rsys} can be computed either as @code{@var{Rsys} = ## @var{N}/@var{Xsys} - Z} or as @code{@var{Rsys} = ## dot(@var{R},@var{V})} ## ## @item @var{Q}(k) ## average number of requests at center @math{k}. The number of ## requests in the system can be computed either as ## @code{sum(@var{Q})}, or using the formula ## @code{@var{N}-@var{Xsys}*@var{Z}}. ## ## @item @var{X}(k) ## center @math{K} throughput. The system throughput @var{Xsys} can be ## computed as @code{@var{Xsys} = @var{X}(1) / @var{V}(1)} ## ## @item @var{G}(n) ## Normalization constants. @code{@var{G}(n+1)} contains the value of ## the normalization constant @math{G(n)}, @math{n=0, @dots{}, N} as ## array indexes in Octave start from 1. @math{G(n)} can be used in ## conjunction with the BCMP theorem to compute steady-state ## probabilities. ## ## @end table ## ## @strong{NOTES} ## ## In presence of load-dependent servers (i.e., if @code{@var{m}(k)>1} ## for some @math{k}), the MVA algorithm is known to be numerically ## unstable. Generally, this issue manifests itself as negative values ## for the response times or utilizations. This is not a problem of ## the @code{queueing} toolbox, but of the MVA algorithm, and has ## currently no known solution. This function prints a warning if ## numerical problems are detected; the warning can be disabled with ## the command @code{warning("off", "qn:numerical-instability")}. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed ## Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April ## 1980, pp. 313--322. @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} ## @end itemize ## ## This implementation is described in R. Jain , @cite{The Art of ## Computer Systems Performance Analysis}, Wiley, 1991, p. 577. ## Multi-server nodes are treated according to G. Bolch, S. Greiner, ## H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: ## Modeling and Performance Evaluation with Computer Science ## Applications}, Wiley, 1998, Section 8.2.1, "Single Class Queueing ## Networks". ## ## @seealso{qncsmvald,qncscmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X G] = qncsmva( varargin ) if ( nargin < 3 || nargin > 5 ) print_usage(); endif [err N S V m Z] = qncschkparam( varargin{:} ); isempty(err) || error(err); K = length(S); # Number of servers U = R = Q = X = zeros( 1, K ); G = zeros(1,N+1); G(1) = 1; if ( N == 0 ) # Trivial case of empty population: just return all zeros return; endif i_single = find( m==1 ); i_multi = find( m>1 ); i_delay = find( m<1 ); ## Initialize results if ( length(i_multi)>0 ) p = zeros( K, max(m)+1 ); # p(i,j+1) is the probability that there are j jobs at server i p(:,1) = 1; endif X_s = 0; # System throughput ## Main MVA loop, iterates over the population size for n=1:N R(i_single) = S(i_single) .* (1 + Q(i_single)); for i=i_multi # I cannot easily vectorize this j=0:m(i)-2; R(i) = S(i) / m(i) * (1+Q(i)+dot( m(i)-j-1, p( i, 1+j ) ) ); endfor R(i_delay) = S(i_delay); R_s = dot( V, R ); # System response time X_s = n / ( Z + R_s ); # System Throughput Q = X_s * ( V .* R ); G(1+n) = G(n) / X_s; ## prepare for next iteration lambda_i = V * X_s; # lambda_i(i) is the node i throughput for i=i_multi j=1:m(i)-1; # range p(i, j+1) = lambda_i(i) .* S(i) ./ min( j,m(i) ) .* p(i,j); p(i,1) = 1 - 1/m(i) * ... (V(i)*S(i)*X_s + dot( m(i)-j, p(i,j+1)) ); endfor endfor X = X_s * V; # Service centers throughput U(i_single) = X(i_single) .* S(i_single); U(i_delay) = X(i_delay) .* S(i_delay); U(i_multi) = X(i_multi) .* S(i_multi) ./ m(i_multi); if ( any(U<0) || any(R<0) ) warning("qn:numerical-instability", "Numerical instability detected. Type 'help qncsmva' for details"); endif endfunction #{ ## This function is slightly faster (and more compact) than the above ## when all servers are single-server or delay centers. Improvements are ## quite small (10%-15% faster, depends on the network size), so at the ## moment it is commented out. function [U R Q X G] = __qncsmva_fast( N, S, V, m, Z ) U = R = Q = X = zeros( 1, length(S) ); X_s = 0; # System throughput G = zeros(1,N+1); G(1) = 1; ## Main MVA loop for n=1:N R = S .* (1+Q.*(m==1)); R_s = dot( V, R ); # System response time X_s = n / ( Z + R_s ); # System Throughput Q = X_s * ( V .* R ); G(1+n) = G(n) / X_s; endfor X = X_s * V; # Service centers throughput U = X .* S; endfunction #} %!test %! fail( "qncsmva()", "Invalid" ); %! fail( "qncsmva( 10, [1 2], [1 2 3] )", "incompatible size" ); %! fail( "qncsmva( 10, [-1 1], [1 1] )", "nonnegative" ); %! fail( "qncsmva( 10.3, [-1 1], [1 1] )", "integer" ); %! fail( "qncsmva( -0.3, [-1 1], [1 1] )", "nonnegative" ); ## Check if networks with only one type of server are handled correctly %!test %! qncsmva(1,1,1,1); %! qncsmva(1,1,1,-1); %! qncsmva(1,1,1,2); %! qncsmva(1,[1 1],[1 1],[-1 -1]); %! qncsmva(1,[1 1],[1 1],[1 1]); %! qncsmva(1,[1 1],[1 1],[2 2]); ## Check degenerate case of N==0 (LI case) %!test %! N = 0; %! S = [1 2 3 4]; %! V = [1 1 1 4]; %! [U R Q X] = qncsmva(N, S, V); %! assert( U, 0*S ); %! assert( R, 0*S ); %! assert( Q, 0*S ); %! assert( X, 0*S ); ## Check degenerate case of N==0 (LD case) %!test %! N = 0; %! S = [1 2 3 4]; %! V = [1 1 1 4]; %! m = [2 3 4 5]; %! [U R Q X] = qncsmva(N, S, V, m); %! assert( U, 0*S ); %! assert( R, 0*S ); %! assert( Q, 0*S ); %! assert( X, 0*S ); %!test %! # Exsample 3.42 p. 577 Jain %! S = [ 0.125 0.3 0.2 ]'; %! V = [ 16 10 5 ]; %! N = 20; %! m = ones(1,3)'; %! Z = 4; %! [U R Q X] = qncsmva(N,S,V,m,Z); %! assert( R, [ .373 4.854 .300 ], 1e-3 ); %! assert( Q, [ 1.991 16.177 0.500 ], 1e-3 ); %! assert( all( U>=0 ) ); %! assert( all( U<=1 ) ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! # Exsample 3.42 p. 577 Jain %! S = [ 0.125 0.3 0.2 ]; %! V = [ 16 10 5 ]; %! N = 20; %! m = ones(1,3); %! Z = 4; %! [U R Q X] = qncsmva(N,S,V,m,Z); %! assert( R, [ .373 4.854 .300 ], 1e-3 ); %! assert( Q, [ 1.991 16.177 0.500 ], 1e-3 ); %! assert( all( U>=0 ) ); %! assert( all( U<=1 ) ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! # Example 8.4 p. 333 Bolch et al. %! S = [ .5 .6 .8 1 ]; %! N = 3; %! m = [2 1 1 -1]; %! V = [ 1 .5 .5 1 ]; %! [U R Q X] = qncsmva(N,S,V,m); %! assert( Q, [ 0.624 0.473 0.686 1.217 ], 1e-3 ); %! assert( X, [ 1.218 0.609 0.609 1.218 ], 1e-3 ); %! assert( all(U >= 0 ) ); %! assert( all(U( m>0 ) <= 1 ) ); %! assert( Q, R.*X, 1e-5 ); # Little's Law %!test %! # Example 8.3 p. 331 Bolch et al. %! # This is a single-class network, which however nothing else than %! # a special case of multiclass network %! S = [ 0.02 0.2 0.4 0.6 ]; %! K = 6; %! V = [ 1 0.4 0.2 0.1 ]; %! [U R Q X] = qncsmva(K, S, V); %! assert( U, [ 0.198 0.794 0.794 0.595 ], 1e-3 ); %! assert( R, [ 0.025 0.570 1.140 1.244 ], 1e-3 ); %! assert( Q, [ 0.244 2.261 2.261 1.234 ], 1e-3 ); %! assert( X, [ 9.920 3.968 1.984 0.992 ], 1e-3 ); %!test %! # Check bound analysis %! N = 10; # max population %! for n=1:N %! S = [1 0.8 1.2 0.5]; %! V = [1 2 2 1]; %! [U R Q X] = qncsmva(n, S, V); %! Xs = X(1)/V(1); %! Rs = dot(R,V); %! # Compare with balanced system bounds %! [Xlbsb Xubsb Rlbsb Rubsb] = qncsbsb( n, S .* V ); %! assert( Xlbsb<=Xs ); %! assert( Xubsb>=Xs ); %! assert( Rlbsb<=Rs ); %! assert( Rubsb>=Rs ); %! # Compare with asymptotic bounds %! [Xlab Xuab Rlab Ruab] = qncsaba( n, S .* V ); %! assert( Xlab<=Xs ); %! assert( Xuab>=Xs ); %! assert( Rlab<=Rs ); %! assert( Ruab>=Rs ); %! endfor %!demo %! S = [ 0.125 0.3 0.2 ]; %! V = [ 16 10 5 ]; %! N = 20; %! m = ones(1,3); %! Z = 4; %! [U R Q X] = qncsmva(N,S,V,m,Z); %! X_s = X(1)/V(1); # System throughput %! R_s = dot(R,V); # System response time %! printf("\t Util Qlen RespT Tput\n"); %! printf("\t-------- -------- -------- --------\n"); %! for k=1:length(S) %! printf("Dev%d\t%8.4f %8.4f %8.4f %8.4f\n", k, U(k), Q(k), R(k), X(k) ); %! endfor %! printf("\nSystem\t %8.4f %8.4f %8.4f\n\n", N-X_s*Z, R_s, X_s ); queueing/inst/dtmcexps.m0000664000175000017500000001023113356105665015253 0ustar morenomoreno## Copyright (C) 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{L} =} dtmcexps (@var{P}, @var{n}, @var{p0}) ## @deftypefnx {Function File} {@var{L} =} dtmcexps (@var{P}, @var{p0}) ## ## @cindex expected sojourn times, DTMC ## @cindex DTMC ## @cindex discrete time Markov chain ## @cindex Markov chain, discrete time ## ## Compute the expected number of visits to each state during the first ## @var{n} transitions, or until abrosption. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## @math{N \times N} transition matrix. @code{@var{P}(i,j)} is the ## transition probability from state @math{i} to state @math{j}. ## ## @item @var{n} ## Number of steps during which the expected number of visits are ## computed (@math{@var{n} @geq{} 0}). If @code{@var{n}=0}, returns ## @var{p0}. If @code{@var{n} > 0}, returns the expected number of ## visits after exactly @var{n} transitions. ## ## @item @var{p0}(i) ## Initial state occupancy probabilities; @code{@var{p0}(i)} is ## the probability that the system is in state @math{i} at step 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{L}(i) ## When called with two arguments, @code{@var{L}(i)} is the expected ## number of visits to state @math{i} before absorption. When ## called with three arguments, @code{@var{L}(i)} is the expected number ## of visits to state @math{i} during the first @var{n} transitions. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item Grinstead, Charles M.; Snell, J. Laurie (July ## 1997). @cite{Introduction to Probability}, Ch. 11: Markov ## Chains. American Mathematical Society. ISBN 978-0821807491. ## @end itemize ## ## @seealso{ctmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function L = dtmcexps ( P, varargin ) persistent epsilon = 10*eps; if ( nargin < 2 || nargin > 3 ) print_usage(); endif [K err] = dtmcchkP(P); (K>0) || ... error(err); if ( nargin == 2 ) p0 = varargin{1}; else n = varargin{1}; p0 = varargin{2}; endif ( isvector(p0) && length(p0) == K && all(p0>=0) && abs(sum(p0)-1.0)=0 || ... error("n must be >= 0"); n = fix(n); L = zeros(sizeof(p0)); ## It is know that ## ## I + P + P^2 + P^3 + ... + P^n = (I-P)^-1 * (I-P^(n+1)) ## ## and therefore we could succintly write ## ## L = p0*inv(eye(K)-P)*(eye(K)-P^(n+1)); ## ## Unfortunatly, the method above is numerically unstable (at least ## for small values of n), so we use the crude approach below. PP = p0; L = zeros(1,K); for p=0:n L += PP; PP *= P; endfor else ## identify transient states tr = find(diag(P) < 1); k = length(tr); # number of transient states if ( k == K ) error("There are no absorbing states"); endif N = zeros(size(P)); tmpN = inv(eye(k) - P(tr,tr)); # matrix N = (I-Q)^-1 N(tr,tr) = tmpN; L = p0*N; endif endfunction %!test %! P = dtmcbd([1 1 1 1], [0 0 0 0]); %! L = dtmcexps(P,[1 0 0 0 0]); %! t = dtmcmtta(P,[1 0 0 0 0]); %! assert( L, [1 1 1 1 0] ); %! assert( sum(L), t ); %!test %! P = dtmcbd(linspace(0.1,0.4,5),linspace(0.4,0.1,5)); %! p0 = [1 0 0 0 0 0]; %! L = dtmcexps(P,0,p0); %! assert( L, p0 ); queueing/inst/qnvisits.m0000664000175000017500000003156013356141107015303 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{V} @var{ch}] =} qnvisits (@var{P}) ## @deftypefnx {Function File} {@var{V} =} qnvisits (@var{P}, @var{lambda}) ## ## Compute the average number of visits to the service centers of a single class, open or closed Queueing Network with @math{N} service centers. ## ## This function is deprecated. Please use one of @code{qncsvisits}, ## @code{qncmvisits}, @code{qnosvisits} or @code{qnomvisits} instead. ## ## @seealso{qncsvisits, qncmvisits, qnosvisits, qnomvisits} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [V ch] = qnvisits( P, varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnvisits is deprecated. Please use one of qncsvisits, qnosvisits, qncmvisits, qnomvisits instead"); endif if ( nargin < 1 || nargin > 2 ) print_usage(); endif ( ndims(P) == 2 || ndims(P) == 4 ) || ... error("P must be a 2- or 4-dimensional matrix"); if ( ndims(P) == 2 ) V = __qnvisitssingle( P, varargin{:} ); ch = [1]; else [V ch] = __qnvisitsmulti( P, varargin{:} ); endif endfunction %!test %! P = [-1 0; 0 0]; %! fail( "qnvisits(P)", "not a transition probability" ); %! P = [1 0; 0.5 0]; %! fail( "qnvisits(P)", "not a transition probability" ); %! P = [1 0; 0 1]; lambda=[0 -1]; %! fail( "qnvisits(P,lambda)", "contains negative" ); %!test %! %! ## Closed, single class network %! %! P = [0 0.3 0.7; 1 0 0; 1 0 0]; %! V = qnvisits(P); %! assert( V*P,V,1e-5 ); %! assert( V, [1 0.3 0.7], 1e-5 ); %!test %! %! ## Open, single class network %! %! P = [0 0.2 0.5; 1 0 0; 1 0 0]; %! lambda = [ 0.1 0.3 0.2 ]; %! V = qnvisits(P,lambda); %! assert( V*P+lambda/sum(lambda),V,1e-5 ); %!test %! %! ## Test tolerance of the qnvisits() function. %! ## This test builds transition probability matrices and tries %! ## to compute the visit counts on them. %! %! for k=[5, 10, 20, 50] %! P = reshape(1:k^2, k, k); %! P = P ./ repmat(sum(P,2),1,k); %! V = qnvisits(P); %! assert( V*P, V, 1e-5 ); %! endfor %!test %! %! ## Closed, multiclass network %! %! C = 2; K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,1) = 1; %! P(2,1,2,3) = 1; %! P(2,3,2,1) = 1; %! V = qnvisits(P); %! for c=1:C %! for k=1:K %! assert(V(c,k), sum(sum(V .* P(:,:,c,k))), 1e-5); %! endfor %! endfor %!test %! %! ## Test multiclass network. Example from Schwetman (figure 7, page 9 of %! ## hhttp://docs.lib.purdue.edu/cstech/259/ %! ## "Testing network-of-queues software, technical report CSD-TR 330, %! ## Purdue University). %! %! C = 2; K = 4; %! P = zeros(C,K,C,K); %! # class 1 routing %! P(1,1,1,1) = .05; %! P(1,1,1,2) = .45; %! P(1,1,1,3) = .5; %! P(1,2,1,1) = 1; %! P(1,3,1,1) = 1; %! # class 2 routing %! P(2,1,2,1) = .01; %! P(2,1,2,3) = .5; %! P(2,1,2,4) = .49; %! P(2,3,2,1) = 1; %! P(2,4,2,1) = 1; %! V = qnvisits(P); %! for c=1:C %! for i=1:K %! assert(V(c,i), sum(sum(V .* P(:,:,c,i))), 1e-5); %! endfor %! endfor %!test %! C = 2; K = 4; %! P = zeros(C,K,C,K); %! # class 1 routing %! P(1,1,1,1) = .05; %! P(1,1,1,2) = .45; %! P(1,1,1,3) = .5; %! P(1,2,1,1) = 0.1; %! P(1,3,1,1) = 0.2; %! # class 2 routing %! P(2,1,2,1) = .01; %! P(2,1,2,3) = .5; %! P(2,1,2,4) = .49; %! P(2,3,2,1) = 0.2; %! P(2,4,2,1) = 0.16; %! lambda = [0.1 0 0 0.1 ; 0 0 0.2 0.1]; %! lambda_sum = sum(lambda(:)); %! V = qnvisits(P, lambda); %! assert( all(V(:)>=0) ); %! for i=1:K %! for c=1:C %! assert(V(c,i), lambda(c,i) / lambda_sum + sum(sum(V .* P(:,:,c,i))), 1e-5); %! endfor %! endfor %!test %! %! ## Network with class switching. %! ## This is example in figure 9 of %! ## Schwetman, "Implementing the Mean Value Analysis %! ## Algorithm fort the solution of Queueing Network Models", Technical %! ## Report CSD-TR-355, Department of Computer Science, Purdue Univrsity, %! ## Feb 15, 1982 %! ## http://docs.lib.purdue.edu/cstech/286/ %! %! C = 2; K = 3; %! S = [.01 .07 .10; ... %! .05 0.7 .10 ]; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = .7; %! P(1,1,1,3) = .2; %! P(1,1,2,1) = .1; %! P(2,1,2,2) = .3; %! P(2,1,2,3) = .5; %! P(2,1,1,1) = .2; %! P(1,2,1,1) = P(1,3,1,1) = 1; %! P(2,2,2,1) = P(2,3,2,1) = 1; %! N = [3 0]; %! V = qnvisits(P); %! VV = [10 7 2; 5 1.5 2.5]; # result given in Schwetman; our function computes something different, but that's ok since visit counts are actually ratios %! assert( V ./ repmat(V(:,1),1,K), VV ./ repmat(VV(:,1),1,K), 1e-5 ); %!test %! %! ## two disjoint classes: must produce two disjoing chains %! %! C = 2; K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,1) = 1; %! P(2,1,2,3) = 1; %! P(2,3,2,1) = 1; %! [nc r] = qnvisits(P); %! assert( r(1) != r(2) ); %!test %! %! ## two classes, one chain %! %! C = 2; K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = .5; %! P(1,2,2,1) = 1; %! P(2,1,2,3) = .5; %! P(2,3,1,1) = 1; %! [nc r] = qnvisits(P); %! assert( r(1) == r(2) ); %!test %! %! ## a "Moebius strip". Note that this configuration is invalid, and %! ## therefore our algorithm must raise an error. This is because this %! ## network has two chains, but both chains contain both classes %! %! C = 2; K = 2; %! P = zeros(C,K,C,K); %! P(1,1,2,2) = 1; %! P(2,2,1,1) = 1; %! P(2,1,1,2) = 1; %! P(1,2,2,1) = 1; %! fail( "qnvisits(P)", "different"); %!test %! %! ## Network with two classes representing independent chains. %! ## This is example in figure 8 of %! ## Schwetman, "Implementing the Mean Value Analysis %! ## Algorithm fort the solution of Queueing Network Models", Technical %! ## Report CSD-TR-355, Department of Computer Science, Purdue Univrsity, %! ## Feb 15, 1982, http://docs.lib.purdue.edu/cstech/286/ %! %! C = 2; K = 2; %! P = zeros(C,K,C,K); %! P(1,1,1,3) = P(1,3,1,1) = 1; %! P(2,2,2,3) = P(2,3,2,2) = 1; %! V = qnvisits(P); %! assert( V, [1 0 1; 0 1 1], 1e-5 ); %!test %! C = 2; %! K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,3) = 1; %! P(1,3,2,2) = 1; %! P(2,2,1,1) = 1; %! [V ch] = qnvisits(P); %! assert( ch, [1 1] ); ## The following transition probability matrix is not well formed: note ## that there is an outgoing transition from center 1, class 1 but not ## incoming transition. %!test %! C = 2; %! K = 3; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = 1; %! P(1,2,1,3) = 1; %! P(1,3,2,2) = 1; %! P(2,2,2,1) = 1; %! P(2,1,1,2) = 1; %! [V ch] = qnvisits(P); %! assert( ch, [1 1] ); ############################################################################## ## Solve the visit equation for multiclass networks with class switching ## P(r,i,s,j) is the probability that a class-r customer on service ## center i moves to service center j as a class-s customer. lambda(r,i) ## is the arrival rate of class-r customers on service center i function [V chains] = __qnvisitsmulti( P, lambda ) [C, K, C2, K2] = size( P ); (K == K2 && C == C2) || ... error( "P must be a [C,K,C,K] matrix"); chains = []; if ( nargin == 1 ) ## closed network: solve the traffic equations: V(s,j) = sum_r sum_i ## V(r,i) * P(r,i,s,j), for all s,j V(s,j) = 1 for all s and for a ## chosen server j visited by chain s requests (see below) A = reshape(P,[K*C K*C])-eye(K*C); b = zeros(1,K*C); CH = __scc(reshape(P,[C*K C*K])>0); nCH = max(CH); # number of chains CH = reshape(CH,C,K); # chains chains = zeros(1,C); for k=1:K for c=1:C if ( chains(c) == 0 ) chains(c) = CH(c,k); else ( CH(c,k) == 0 || chains(c) == CH(c,k) ) || ... error("Class %d belongs to different chains",c); endif endfor endfor ## Since there may be queueing centers which are never ## visited by some chain(s), we must be careful here. Consider the ## following example: ## +---------------------------+ ## | +---+ +---+ +---+ | Class 1 ## +--| |----| |----| |--+ ## | 1 | | 2 | | 3 | ## | | ..| |....| |.. ## +---+ . +---+ +---+ . Class 2 ## .................. ## There are two classes, 1 and 2. These must correspond to two ## chains; note that server 1 is never visited by class 2. In the ## situation above, CH(2,1) = 0. Obviously, we also have V(2,1) = 0. ## To find a solution to the linear system V(s,j) = sum_r sum_i ## V(r,i) P(r,i,s,j) we must set some constraints (otherwise the ## system may be under defined). If center k is never visited by ## class c, we set the constraint V(c,k) = 0; If node k is visited ## by class c as part of chain q, we set constraints(q)=1 and V(c,k) ## = 1. constraints = zeros(1,nCH); # we put one constraint per chain for c=1:C for k=1:K cc = CH(c,k); if ( cc == 0 || constraints(cc) == 0 ) ii = sub2ind([C K],c,k); A(:,ii) = 0; A(ii,ii) = 1; if ( cc > 0 ) ## we put one constraint for this chain constraints(cc) = 1; b(ii) = 1; else b(ii) = 0; endif endif endfor endfor V = reshape(b/A, C, K); else ## open network: solve the traffic equations: V(s,j) = lambda(s,j) / ## lambda + sum_r sum_i V(r,i) * P(r,i,s,j), for all s,j where ## lambda is defined as sum_r sum_i lambda(r,i) [C,K] == size(lambda) || ... error( "lambda size mismatch" ); ## solve the traffic equation A = eye(K*C) - reshape(P,[K*C K*C]); b = reshape(lambda / sum(lambda(:)), [1,K*C]); V = reshape(b/A, [C, K]); endif ## Make sure that no negative values appear (sometimes, numerical ## errors produce tiny negative values instead of zeros) V = max(0,V); endfunction ## compute strongly connected components using Kosaraju's algorithm, ## which requires two DFS visits. A better solution would be to use ## Tarjan's algorithm. ## ## In this implementation, an isolated node without self loops will NOT ## belong to any SCC. Although this is not formally correct from the ## graph theoretic point of view, it is necessary to compute chains ## correctly. function s = __scc(G) assert(issquare(G)); N = rows(G); GF = (G>0); GB = (G'>0); s = zeros(N,1); c=1; for n=1:N if (s(n) == 0) fw = __dfs(GF,n); bw = __dfs(GB,n); r = (fw & bw); if (any(r)) s(r) = c++; endif endif endfor endfunction ## Executes a dfs visit on graph G, starting from source node s function v = __dfs(G, s) assert( issquare(G) ); N = rows(G); v = stack = zeros(1,N); ## v(i) == 1 iff node i has been visited q = 1; # first empty slot in queue stack(q++) = s; ## Note: node s is NOT marked as visited; it will me marked as visited ## only if we visit it again. This is necessary to ensure that ## isolated nodes without self loops will not belong to any SCC. while( q>1 ) n = stack(--q); ## explore neighbors of n: all f in G(n,:) such that v(f) == 0 ## The following instruction is equivalent to: ## for f=find(G(n,:)) ## if ( v(f) == 0 ) for f = find ( G(n,:) & (v==0) ) stack(q++) = f; v(f) = 1; endfor endwhile endfunction ############################################################################## ## Solve the visit equation for single class networks. function V = __qnvisitssingle( P, lambda ) persistent epsilon = 10*eps; issquare(P) || ... error( "P must be a square matrix" ); N = size(P,1); V = zeros(N,N); if ( nargin < 2 ) ## ## Closed network ## [res err] = dtmcchkP(P); (res>0) || ... error( "P is not a transition probability matrix for closed networks" ); A = P-eye(N); b = zeros(1,N); i = 1; # reference station A(:,i) = 0; A(i,i) = 1; b(i) = 1; V = b/A; else ## ## Open network ## all(P(:)>=0) && all( sum(P,2)<=1+1e-5 ) || ... error( "P is not a transition probability matrix for open networks" ); ( isvector(lambda) && length(lambda) == N ) || ... error( "lambda size mismatch" ); all( lambda>= 0 ) || ... error( "lambda contains negative values" ); A = eye(N)-P; b = lambda / sum(lambda); V = b/A; endif ## Make sure that no negative values appear (sometimes, numerical ## errors produce tiny negative values instead of zeros) V = max(0,V); endfunction queueing/inst/qncsmvablo.m0000664000175000017500000001404213356122276015572 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvablo (@var{N}, @var{S}, @var{M}, @var{P} ) ## ## @cindex queueing network with blocking ## @cindex blocking queueing network ## @cindex closed network, finite capacity ## @cindex MVABLO ## ## Approximate MVA algorithm for closed queueing networks with blocking. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## number of requests in the system. @var{N} must be strictly greater ## than zero, and less than the overall network capacity: @code{0 < ## @var{N} < sum(@var{M})}. ## ## @item @var{S}(k) ## average service time on server @math{k} (@code{@var{S}(k) > 0}). ## ## @item @var{M}(k) ## capacity of center @math{k}. The capacity is the maximum number of requests in a service ## center, including the request in service (@code{@var{M}(k) @geq{} 1}). ## ## @item @var{P}(i,j) ## probability that a request which completes ## service at server @math{i} will be transferred to server @math{j}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## center @math{k} utilization. ## ## @item @var{R}(k) ## average response time of service center @math{k}. ## ## @item @var{Q}(k) ## average number of requests in service center @math{k} (including ## the request in service). ## ## @item @var{X}(k) ## center @math{k} throughput. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Ian F. Akyildiz, @cite{Mean Value Analysis for Blocking Queueing ## Networks}, IEEE Transactions on Software Engineering, vol. 14, n. 2, ## april 1988, pp. 418--428. @uref{http://dx.doi.org/10.1109/32.4663, 10.1109/32.4663} ## @end itemize ## ## @seealso{qnopen, qnclosed} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncsmvablo( K, S, M, P ) ## Note that we use "K" instead of "N" as the number of requests in ## order to be compliant with the paper by Akyildiz describing this ## algorithm. if ( nargin != 4 ) print_usage(); endif ( isscalar(K) && K > 0 ) || ... error( "K must be a positive integer" ); isvector(S) && all(S>0) || ... error ("S must be a vector > 0"); S = S(:)'; # make S a row vector N = length(S); ( isvector(M) && length(M) == N ) || ... error( "M must be a vector with %d elements", N ); all( M >= 1) || ... error( "M must be >= 1"); M = M(:)'; # make M a row vector (K < sum(M)) || ... error( "The population size K=%d exceeds the total system capacity %d", K, sum(M) ); [na err] = dtmcchkP(P); ( na>0 ) || ... error( err ); rows(P) == N || ... error("The number of rows of P must be equal to the length of S"); ## Note: in this implementation we make use of the same notation found ## in Akyildiz's paper cited in the REFERENCES above, with the minor ## exception of using 'v' instead of 'e' as the visit count vector. ## k_bar(i) is the average number of jobs in the i-th server, lambda ## is the network throughput, t_bar(i) is the mean residence time ## (time spent in queue and in service) for requests in the i-th ## service center. ## Initialization k_bar_m1 = zeros(1,N); # k_bar(k-1) BT = zeros(1,N); z = ones(1,N); lambda = 0; ## Computation of the visit counts v = qncsvisits(P); D = S .* v; # Service demand ## Main loop for k=1:K do ## t_bar_i(k) = S(i) *(z_i(k) + k_bar_i(k-1))+BT_i(k) t_bar = S .* ( z + k_bar_m1 ) + BT; lambda = k / dot(v,t_bar); k_bar = t_bar .* v * lambda; if ( any(k_bar>M) ) i = find( k_bar > M, 1 ); z(i) = 0; BT = BT + S(i) * ( v .* P(:,i)' ) / v(i); endif until( all(k_bar<=M) ); k_bar_m1 = k_bar; endfor R = t_bar; X = v * lambda; # Throughputs ## w_bar = t_bar - S - BT; # mean waiting time U = X .* S; Q = X .* R; endfunction %!test %! fail( "qncsmvablo( 10, [1 1], [4 5], [0 1; 1 0] )", "capacity"); %! fail( "qncsmvablo( 6, [1 1], [4 5], [0 1; 1 1] )", "stochastic"); %! fail( "qncsmvablo( 5, [1 1 1], [1 1], [0 1; 1 1] )", "3 elements"); %!test %! # This is the example on section v) p. 422 of the reference paper %! M = [12 10 14]; %! P = [0 1 0; 0 0 1; 1 0 0]; %! S = [1/1 1/2 1/3]; %! K = 27; %! [U R Q X]=qncsmvablo( K, S, M, P ); %! assert( R, [11.80 1.66 14.4], 1e-2 ); %!test %! # This is example 2, i) and ii) p. 424 of the reference paper %! M = [4 5 5]; %! S = [1.5 2 1]; %! P = [0 1 0; 0 0 1; 1 0 0]; %! K = 10; %! [U R Q X]=qncsmvablo( K, S, M, P ); %! assert( R, [6.925 8.061 4.185], 1e-3 ); %! K = 12; %! [U R Q X]=qncsmvablo( K, S, M, P ); %! assert( R, [7.967 9.019 8.011], 1e-3 ); %!test %! # This is example 3, i) and ii) p. 424 of the reference paper %! M = [8 7 6]; %! S = [0.2 1.2 1.4]; %! P = [ 0 0.5 0.5; 1 0 0; 1 0 0 ]; %! K = 10; %! [U R Q X] = qncsmvablo( K, S, M, P ); %! assert( R, [1.674 5.007 7.639], 1e-3 ); %! K = 12; %! [U R Q X] = qncsmvablo( K, S, M, P ); %! assert( R, [2.166 5.372 6.567], 1e-3 ); %!test %! # Network which never blocks, central server model %! M = [50 50 50]; %! S = [1 1/0.8 1/0.4]; %! P = [0 0.7 0.3; 1 0 0; 1 0 0]; %! K = 40; %! [U1 R1 Q1] = qncsmvablo( K, S, M, P ); %! V = qncsvisits(P); %! [U2 R2 Q2] = qncsmva( K, S, V ); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); queueing/inst/dtmc_is_irreducible.m0000664000175000017500000000520612762513610017416 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{r} @var{s}] =} dtmc_is_irreducible (@var{P}) ## ## This function is deprecated. Please use @code{dtmcisir} instead. ## ## @seealso{dtmcisir} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [r s] = dtmc_is_irreducible( P ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_is_irreducible is deprecated. Please use dtmcisir instead"); endif [r s] = dtmcisir( P ); endfunction %!test %! P = [0 .5 0; 0 0 0]; %! fail( "dtmc_is_irresudible(P)" ); %!test %! P = [0 1 0; 0 .5 .5; 0 1 0]; %! [r s] = dtmc_is_irreducible(P); %! assert( r == 0 ); %! assert( max(s), 2 ); %! assert( min(s), 1 ); %!test %! P = [.5 .5 0; .2 .3 .5; 0 .2 .8]; %! [r s] = dtmc_is_irreducible(P); %! assert( r == 1 ); %! assert( max(s), 1 ); %! assert( min(s), 1 ); ## FIXME: (mosty) copied from qnvisits.m; use a better algorithm for SCC ## (e.g., ## http://pmtksupport.googlecode.com/svn/trunk/gaimc1.0-graphAlgo/scomponents.m function s = __scc(G) assert(issquare(G)); N = rows(G); GF = (G>0); GB = (G'>0); s = zeros(N,1); c=1; for n=1:N if (s(n) == 0) fw = __dfs(GF,n); bw = __dfs(GB,n); r = (fw & bw); s(r) = c++; endif endfor endfunction ## FIXME: (mosty) copied from qnvisits.m function v = __dfs(G, s) assert( issquare(G) ); N = rows(G); v = stack = zeros(1,N); ## v(i) == 1 iff node i has been visited q = 1; # first empty slot in queue stack(q++) = s; v(s) = 1; while( q>1 ) n = stack(--q); ## explore neighbors of n: all f in G(n,:) such that v(f) == 0 ## The following instruction is equivalent to: ## for f=find(G(n,:)) ## if ( v(f) == 0 ) for f = find ( G(n,:) & (v==0) ) stack(q++) = f; v(f) = 1; endfor endwhile endfunction queueing/inst/dtmc_bd.m0000664000175000017500000000257112762046576015035 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{P} =} dtmc_bd (@var{b}, @var{d}) ## ## This function is deprecated. Please use @code{dtmcbd} instead. ## ## @seealso{dtmcbd} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function P = dtmc_bd( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_bd is deprecated. Please use dtmcbd instead"); endif P = dtmcbd( varargin{:} ); endfunction %!test %! birth = [.5 .5 .3]; %! death = [.6 .2 .3]; %! fail("dtmc_bd(birth,death)","must be"); queueing/inst/qncscmva.m0000664000175000017500000001731413356120401015231 0ustar morenomoreno## Copyright (C) 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncscmva (@var{N}, @var{S}, @var{Sld}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncscmva (@var{N}, @var{S}, @var{Sld}, @var{V}, @var{Z}) ## ## @cindex conditional MVA (CMVA) ## @cindex Mean Value Analysis, conditional (CMVA) ## @cindex closed network, single class ## @cindex CMVA ## ## Conditional MVA (CMVA) algorithm, a numerically stable variant of ## MVA. This function supports a network of @math{M @geq{} 1} service ## centers and a single delay center. Servers @math{1, @dots{}, M-1} ## are load-independent; server @math{M} is load-dependent. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## Number of requests in the system, @code{@var{N} @geq{} 0}. If ## @code{@var{N} == 0}, this function returns @code{@var{U} = @var{R} ## = @var{Q} = @var{X} = 0} ## ## @item @var{S}(k) ## mean service time on server @math{k = 1, @dots{}, M-1} ## (@code{@var{S}(k) > 0}). If there are no fixed-rate servers, then ## @code{S = []} ## ## @item @var{Sld}(n) ## inverse service rate at server @math{M} (the load-dependent server) ## when there are @math{n} requests, @math{n=1, @dots{}, N}. ## @code{@var{Sld}(n) = } @math{1 / \mu(n)}. ## ## @item @var{V}(k) ## average number of visits to service center @math{k=1, @dots{}, M}, ## where @code{@var{V}(k) @geq{} 0}. @code{@var{V}(1:M-1)} are the ## visit rates to the fixed rate servers; @code{@var{V}(M)} is the ## visit rate to the load dependent server. ## ## @item @var{Z} ## External delay for customers (@code{@var{Z} @geq{} 0}). Default is 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## center @math{k} utilization (@math{k=1, @dots{}, M}) ## ## @item @var{R}(k) ## response time of center @math{k} (@math{k=1, @dots{}, M}). The ## system response time @var{Rsys} can be computed as @code{@var{Rsys} ## = @var{N}/@var{Xsys} - Z} ## ## @item @var{Q}(k) ## average number of requests at center @math{k} (@math{k=1, @dots{}, M}). ## ## @item @var{X}(k) ## center @math{k} throughput (@math{k=1, @dots{}, M}). ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Casale. @cite{A note on stable flow-equivalent aggregation in ## closed networks}. Queueing Syst. Theory Appl., 60:193–-202, December ## 2008, @uref{http://dx.doi.org/10.1007/s11134-008-9093-6, 10.1007/s11134-008-9093-6} ## @end itemize ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncscmva( N, S, Sld, V, Z ) ## This is a numerically stable implementation of the MVA algorithm, ## described in G. Casale, A note on stable flow-equivalent aggregation in ## closed networks. Queueing Syst. Theory Appl., 60:193–-202, December ## 2008, http://dx.doi.org/10.1007/s11134-008-9093-6 if ( nargin < 4 || nargin > 5 ) print_usage(); endif isscalar(N) && N >= 0 || ... error("N must be a positive scalar"); (isempty(S) || isvector(S)) || ... error("S must be a vector"); S = S(:)'; # make S a row vector M = length(S)+1; # total number of service centers (excluding the delay center) isvector(Sld) && length(Sld) == N && all(Sld>=0) || ... error("Sld must be a vector with %d elements >= 0", N); Sld = Sld(:)'; # Make Sld a row vector isvector(V) && length(V) == M && all(V>=0) || ... error("V must be a vector with %d elements", M); V = V(:)'; # Make V a row vector ## The reference paper assumes queue M (LD center) as reference. ## Therefore, we need to rescale V V(M) > 0 || ... error("V(M) must be >0"); V = V / V(M); if ( nargin == 5 ) isscalar(Z) && Z>=0 || ... error("Z must be nonnegative"); else Z = 0; endif if ( N == 0 ) U = R = Q = X = zeros(1,M); return; endif ## Di(1+k) = service demand of server k=0,1,...,M-1 (server 0 is the delay center) Di = zeros(1,M); Di(1) = Z; Di(2:M) = S .* V(1:M-1); ## DM(n,t), n=1, ..., N, t=1, ..., N DM = zeros(N,N); mu = 1./Sld; # rate function ## Ri(1+k,:,:) = response time of server k=0,1,...,M Ri = zeros(1+M,N,N); ## Qi(k,1+n,t) = queue length of server k=1,...,M, n=0,1,...,N, t=1,...,N+1 Qi = zeros(M,1+N,N+1); Xs = zeros(N,N); # Xs = system throughput ## Main MVA loop for n=1:N for t=1:(N-n+1) if ( n==1 ) DM(n,t) = 1/mu(t); else # n>=2 DM(n,t) = Xs(n-1,t)/Xs(n-1,t+1)*DM(n-1,t); endif Ri(1+0,n,t) = Di(1+0); i=1:M-1; Ri(1+i,n,t) = Di(1+i).*(1+Qi(i,1+n-1,t))'; Ri(1+M,n,t) = DM(n,t)*(1+Qi(M,1+n-1,t+1)); Xs(n,t) = n/sum(Ri(:,n,t)); i=1:M-1; Qi(i,1+n,t) = Di(1+i) .* Xs(n,t) .* (1+Qi(i,1+n-1,t))'; Qi(M,1+n,t) = DM(n,t) * Xs(n,t) * (1+Qi(M,1+n-1,t+1)); endfor endfor X = Xs(N,1).*V; Q = Qi(1:M,1+N,1)'; ## Note that the result R is the *response time*, while the value ## computed by the reference paper is the *residence time*. The ## response time is equal to the residence time divided by the visit ## ratios. FIXME: This will choke if the visit ratio is zero for some server k R = Ri(2:M+1,N,1)' ./ V; U = [Di(2:M) DM(N,1)] .* X ./ V; endfunction %!test %! N=5; %! S = [1 0.3 0.8 0.9]; %! V = [1 1 1 1]; %! [U1 R1 Q1 X1] = qncscmva( N, S(1:3), repmat(S(4),1,N), V ); %! [U2 R2 Q2 X2] = qncsmva(N, S, V); %! assert( X1, X2, 1e-5 ); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %!test %! N=5; %! S = [1 1 1 1 1; ... %! 1 1 1 1 1; ... %! 1 1 1 1 1; ... %! 1 1/2 1/3 1/4 1/5]; %! V = [1 1 1 1]; %! [U1 R1 Q1 X1] = qncscmva( N, S(1:3,1), S(4,:), V ); %! [U2 R2 Q2 X2] = qncsmvald(N, S, V); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %! assert( X1, X2, 1e-5 ); %!test %! N=5; %! S = [1 1 1 1 1; ... %! 1 1 1 1 1; ... %! 1 1 1 1 1; ... %! 1 1/2 1/3 1/4 1/5]; %! V = [1 2 1 1]; %! Z = 3; %! [U1 R1 Q1 X1] = qncscmva( N, S(1:3,1), S(4,:), V, Z ); %! [U2 R2 Q2 X2] = qncsmvald(N, S, V, Z); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %! assert( X1, X2, 1e-5 ); %!demo %! maxN = 90; # Max population size %! Rmva = Rconv = Rcmva = zeros(1,maxN); # Results %! S = 4; Z = 10; m = 8; %! old = warning("query","qn:numerical-instability"); %! warning("off","qn:numerical-instability"); %! for N=1:maxN %! [U R] = qncsmva(N,S,1,m,Z); # Use MVA %! Rmva(N) = R(1); %! [U R] = qncsconv(N,[S Z],[1 1],[m -1]); # Use Convolution %! Rconv(N) = R(1); %! if ( N > m ) %! Scmva = S ./ min(1:N,m); %! else %! Scmva = S ./ (1:N); %! endif %! [U R] = qncscmva(N,[],Scmva,1,Z); # Use CMVA %! Rcmva(N) = R(1); %! endfor %! warning(old.state,"qn:numerical-instability"); %! plot(1:maxN, Rmva, ";MVA;", ... %! 1:maxN, Rconv, ";Convolution;", ... %! 1:maxN, Rcmva, ";CNVA;", "linewidth",2); %! xlabel("Population size (N)"); %! ylabel("Response Time"); %! ax=axis(); ax(3) = 0; ax(4) = 40; axis(ax); %! legend("location","northwest"); legend("boxoff"); queueing/inst/qsmh1.m0000664000175000017500000000607713123252506014457 0ustar morenomoreno## Copyright (C) 2009 Dmitry Kolesnikov ## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmh1 (@var{lambda}, @var{mu}, @var{alpha}) ## ## @cindex @math{M/H_m/1} system ## ## Compute utilization, response time, average number of requests and ## throughput for a @math{M/H_m/1} system. In this system, the customer ## service times have hyper-exponential distribution: ## ## @tex ## $$ B(x) = \sum_{j=1}^m \alpha_j(1-e^{-\mu_j x}),\quad x>0 $$ ## @end tex ## ## @ifnottex ## @example ## @group ## ___ m ## \ ## B(x) = > alpha(j) * (1-exp(-mu(j)*x)) x>0 ## /__ ## j=1 ## @end group ## @end example ## @end ifnottex ## ## where @math{\alpha_j} is the probability that the request is served ## at phase @math{j}, in which case the average service rate is ## @math{\mu_j}. After completing service at phase @math{j}, for ## some @math{j}, the request exits the system. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate ## ## @item @var{mu} ## @code{@var{mu}(j)} is the phase @math{j} service rate. The total ## number of phases @math{m} is @code{length(@var{mu})}. ## ## @item @var{alpha} ## @code{@var{alpha}(j)} is the probability that a request ## is served at phase @math{j}. @var{alpha} must have the same size ## as @var{mu}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Service center utilization ## ## @item @var{R} ## Service center response time ## ## @item @var{Q} ## Average number of requests in the system ## ## @item @var{X} ## Service center throughput ## ## @end table ## ## @end deftypefn ## Author: Dmitry Kolesnikov function [U R Q X p0] = qsmh1(lambda, mu, alpha) if ( nargin != 3 ) print_usage(); endif if ( size(mu) != size(alpha) ) error( "parameters are of incompatible size" ); endif [n c] = size(mu); if (!is_scalar(lambda) && (n != length(lambda)) ) error( "parameters are of incompatible size" ); endif for i=1:n avg = sum( alpha(i,:) .* (1 ./ mu(i,:)) ); m2nd = sum( alpha(i,:) .* (1 ./ (mu(i,:) .* mu(i,:))) ); if (is_scalar(lambda)) xavg = avg; x2nd = m2nd; else xavg(i) = avg; x2nd(i) = m2nd; endif endfor [U R Q X p0] = qsmg1(lambda, xavg, x2nd); endfunction queueing/inst/qnmm1.m0000664000175000017500000000252212762046576014466 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qnmm1 (@var{lambda}, @var{mu}) ## ## This function is deprecated. Please use @code{qsmm1} instead. ## ## @seealso{qsmm1} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0] = qnmm1( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmm1 is deprecated. Please use qsmm1 instead"); endif [U R Q X p0] = qsmm1( varargin{:} ); endfunction queueing/inst/qncmva.m0000664000175000017500000000274712762046576014733 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmva (@var{N}, @var{S}, @var{Sld}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmva (@var{N}, @var{S}, @var{Sld}, @var{V}, @var{Z}) ## ## This function is deprecated. Please use @code{qncscmva} instead. ## ## @seealso{qncscmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncmva( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "Function qncmva is deprecated. Please use qncscmva instead"); endif [U R Q X] = qncscmva( varargin{:} ); endfunction queueing/inst/ctmctaexps.m0000664000175000017500000001171713356111700015574 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} ctmctaexps (@var{Q}, @var{t}, @var{p0}) ## @deftypefnx {Function File} {@var{M} =} ctmctaexps (@var{Q}, @var{p0}) ## ## @cindex Markov chain, continuous time ## @cindex time-alveraged sojourn time, CTMC ## @cindex continuous time Markov chain ## @cindex CTMC ## ## Compute the @emph{time-averaged sojourn time} @code{@var{M}(i)}, ## defined as the fraction of the time interval @math{[0,t]} (or until ## absorption) spent in state @math{i}, assuming that the state ## occupancy probabilities at time 0 are @var{p}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{Q}(i,j) ## Infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition ## rate from state @math{i} to state @math{j}, ## @math{1 @leq{} i,j @leq{} N}, @math{i \neq j}. The ## matrix @var{Q} must also satisfy the condition @math{\sum_{j=1}^N Q_{ij} = 0} ## ## @item @var{t} ## Time. If omitted, the results are computed until absorption. ## ## @item @var{p0}(i) ## initial state occupancy probabilities. @code{@var{p0}(i)} is the ## probability that the system is in state @math{i} at time 0, @math{i ## = 1, @dots{}, N} ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{M}(i) ## When called with three arguments, @code{@var{M}(i)} is the expected ## fraction of the interval @math{[0,t]} spent in state @math{i} ## assuming that the state occupancy probability at time zero is ## @var{p}. When called with two arguments, @code{@var{M}(i)} is the ## expected fraction of time until absorption spent in state @math{i}; ## in this case the mean time to absorption is @code{sum(@var{M})}. ## ## @end table ## ## @seealso{ctmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function M = ctmctaexps( Q, varargin ) persistent epsilon = 10*eps; if ( nargin < 2 || nargin > 3 ) print_usage(); endif L = ctmcexps(Q,varargin{:}); M = L ./ repmat(sum(L,2),1,columns(L)); endfunction %!test %! Q = [ 0 0.1 0 0; ... %! 0.9 0 0.1 0; ... %! 0 0.9 0 0.1; ... %! 0 0 0 0 ]; %! Q -= diag( sum(Q,2) ); %! M = ctmctaexps(Q, [1 0 0 0]); %! assert( sum(M), 1, 10*eps ); %!demo %! lambda = 0.5; %! N = 4; %! birth = lambda*linspace(1,N-1,N-1); %! death = zeros(1,N-1); %! Q = diag(birth,1)+diag(death,-1); %! Q -= diag(sum(Q,2)); %! t = linspace(1e-5,30,100); %! p = zeros(1,N); p(1)=1; %! M = zeros(length(t),N); %! for i=1:length(t) %! M(i,:) = ctmctaexps(Q,t(i),p); %! endfor %! clf; %! plot(t, M(:,1), ";State 1;", "linewidth", 2, ... %! t, M(:,2), ";State 2;", "linewidth", 2, ... %! t, M(:,3), ";State 3;", "linewidth", 2, ... %! t, M(:,4), ";State 4 (absorbing);", "linewidth", 2 ); %! legend("location","east"); legend("boxoff"); %! xlabel("Time"); %! ylabel("Time-averaged Expected sojourn time"); ## This example is from: David I. Heimann, Nitin Mittal, Kishor S. Trivedi, ## "Availability and Reliability Modeling for Computer Systems", sep 1989, ## section 2.5 %!demo %! sec = 1; %! min = sec*60; %! hour = 60*min; %! day = 24*hour; %! %! # state space enumeration {2, RC, RB, 1, 0} %! a = 1/(10*min); # 1/a = duration of reboot (10 min) %! b = 1/(30*sec); # 1/b = reconfiguration time (30 sec) %! g = 1/(5000*hour); # 1/g = processor MTTF (5000 hours) %! d = 1/(4*hour); # 1/d = processor MTTR (4 hours) %! c = 0.9; # coverage %! Q = [ -2*g 2*c*g 2*(1-c)*g 0 0; ... %! 0 -b 0 b 0; ... %! 0 0 -a a 0; ... %! d 0 0 -(g+d) g; ... %! 0 0 0 d -d]; %! p = ctmc(Q); %! printf("System availability: %f\n",p(1)+p(4)); %! TT = linspace(0,1*day,101); %! PP = ctmctaexps(Q,TT,[1 0 0 0 0]); %! A = At = Abart = zeros(size(TT)); %! A(:) = p(1) + p(4); # steady-state availability %! for n=1:length(TT) %! t = TT(n); %! p = ctmc(Q,t,[1 0 0 0 0]); %! At(n) = p(1) + p(4); # instantaneous availability %! Abart(n) = PP(n,1) + PP(n,4); # interval base availability %! endfor %! clf; %! semilogy(TT,A,";Steady-state;", ... %! TT,At,";Instantaneous;", ... %! TT,Abart,";Interval base;"); %! ax = axis(); %! ax(3) = 1-1e-5; %! axis(ax); %! legend("boxoff"); queueing/inst/qnmarkov.m0000664000175000017500000002740513356124050015262 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{lambda}, @var{S}, @var{C}, @var{P}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{lambda}, @var{S}, @var{C}, @var{P}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{N}, @var{S}, @var{C}, @var{P}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{N}, @var{S}, @var{C}, @var{P}, @var{m}) ## ## @cindex closed network, multiple classes ## @cindex closed network, finite capacity ## @cindex blocking queueing network ## @cindex RS blocking ## ## Compute utilization, response time, average queue length and ## throughput for open or closed queueing networks with finite capacity. ## Blocking type is Repetitive-Service (RS). This function explicitly ## generates and solve the underlying Markov chain, and thus might ## require a large amount of memory. ## ## More specifically, networks which can me analyzed by this ## function have the following properties: ## ## @itemize @bullet ## ## @item There exists only a single class of customers. ## ## @item The network has @math{K} service centers. Center ## @math{k} has @math{m_k > 0} servers, and has a total (finite) capacity of ## @math{C_k \geq m_k} which includes both buffer space and servers. ## The buffer space at service center @math{k} is therefore ## @math{C_k - m_k}. ## ## @item The network can be open, with external arrival rate to ## center @math{k} equal to ## @math{\lambda_k}, or closed with fixed ## population size @math{N}. For closed networks, the population size ## @math{N} must be strictly less than the network capacity: @math{N < \sum_i C_i}. ## ## @item Average service times are load-independent. ## ## @item @math{P_{i, j}} is the probability that requests completing ## execution at center @math{i} are transferred to ## center @math{j}, @math{i \neq j}. For open networks, a request may leave the system ## from any node @math{i} with probability @math{1-\sum_j P_{i, j}}. ## ## @item Blocking type is Repetitive-Service (RS). Service ## center @math{j} is @emph{saturated} if the number of requests is equal ## to its capacity @math{C_j}. Under the RS blocking discipline, ## a request completing service at center @math{i} which is being ## transferred to a saturated server @math{j} is put back at the end of ## the queue of @math{i} and will receive service again. Center @math{i} ## then processes the next request in queue. External arrivals to a ## saturated servers are dropped. ## ## @end itemize ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda}(k) ## @itemx @var{N} ## If the first argument is a vector @var{lambda}, it is considered to be ## the external arrival rate @code{@var{lambda}(k) @geq{} 0} to service center ## @math{k} of an open network. If the first argument is a scalar, it is ## considered as the population size @var{N} of a closed network; in this case ## @var{N} must be strictly ## less than the network capacity: @code{@var{N} < sum(@var{C})}. ## ## @item @var{S}(k) ## average service time at service center @math{k} ## ## @item @var{C}(k) ## capacity of service center @math{k}. The capacity includes both ## the buffer and server space @code{@var{m}(k)}. Thus the buffer space is ## @code{@var{C}(k)-@var{m}(k)}. ## ## @item @var{P}(i,j) ## transition probability from service center ## @math{i} to service center @math{j}. ## ## @item @var{m}(k) ## number of servers at service center ## @math{k}. Note that @code{@var{m}(k) @geq{} @var{C}(k)} for each @var{k}. ## If @var{m} is omitted, all service centers are assumed to have a ## single server (@code{@var{m}(k) = 1} for all @math{k}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## center @math{k} utilization. ## ## @item @var{R}(k) ## response time on service center @math{k}. ## ## @item @var{Q}(k) ## average number of customers in the ## service center @math{k}, @emph{including} the request in service. ## ## @item @var{X}(k) ## throughput of service center @math{k}. ## ## @end table ## ## @strong{NOTES} ## ## The space complexity of this implementation is @math{O(\prod_{k=1}^K (C_k + 1)^2)}. The time complexity is dominated by ## the time needed to solve a linear system with @math{\prod_{k=1}^K (C_k + 1)} unknowns. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnmarkov( x, S, C, P, m ) if ( nargin < 4 || nargin > 5 ) print_usage(); endif isvector(S) || error( "S must be a vector" ); K = length(S); # number of service centers if ( nargin < 5 ) m = ones(1,K); else size_equal(m,S) || error( "m must have the same langth as S" ); endif ( [K,K] == size(P) && all( all(P>=0)) && all(sum(P,2) <= 1)) || ... error( "P must be SxS and nonnegative" ); if ( isscalar(x) ) is_open = false; N = x; # closed network ( N < sum(C) ) || ... error( "The population size exceeds the network capacity" ); all( abs(sum(P,2)-1) < 1000*eps ) || ... error( "P for closed networks cannot have exit nodes" ); else is_open = true; lambda = x; # open network size_equal(lambda, S ) || ... error( "lambda must have the same langth as S" ); endif ( all(m > 0) && all(m <= C) ) || ... error( "Capacities C must be greater or equal than m" ); q_size = prod( C+1 ); # number of states of the system ## The infinitesimal generator matrix Q_markovmight be sparse, so it ## would be appropriate to represent it as a sparse matrix. In this ## case the UMFPACK library must be installed to solve the @math{{\bf ## A}x=b} sparse system. Since I'm not sure everyone built Octave with ## sparse matrix support, I leave Q_markov as a full matrix here. Q_markov = zeros( q_size, q_size ); cur_state = zeros(1, K); if ( is_open ) valid_populations = linspace(0, sum(C), sum(C)+1); else valid_populations = [ N ]; endif ## exit_prob(i) is the probability that a job leaves the system from node i exit_prob = 1 - sum(P,2); for n=valid_populations pop_mix = qncmpopmix( n, C ); for cur_state=pop_mix' # for each feasible configuration with n customers cur_idx = sub2cell( C, cur_state ); for i=1:K if ( is_open ) # for open networks only ## handle new external arrival to center i if ( lambda(i) > 0 && cur_state(i) < C(i) ) next_state = cur_state; next_state(i) += 1; next_idx = sub2cell( C, next_state ); Q_markov( cur_idx, next_idx ) = lambda(i); endif ## handle requests that leave the system from center i ## exit_prob = 1-sum(P(i,:)); if ( exit_prob(i) > 0 && cur_state(i) > 0 ) next_state = cur_state; next_state(i) -= 1; next_idx = sub2cell( C, next_state ); Q_markov( cur_idx, next_idx ) = min(m(i), cur_state(i))*exit_prob(i)/S(i); endif endif # end open networks only ## for both open and closed networks for j=[1:(i-1) (i+1):K] ## check whether a job can move from server i to server j!=i if ( cur_state(i) > 0 && cur_state(j) < C(j) && P(i,j) > 0 ) next_state = cur_state; next_state(i) -= 1; next_state(j) += 1; next_idx = sub2cell( C, next_state ); Q_markov( cur_idx, next_idx ) = min(m(i), cur_state(i))*P(i,j)/S(i); endif endfor endfor endfor endfor ##spy( Q_markov ); ## complete the diagonal elements of the matrix Q d = sum(Q_markov,2); Q_markov -= diag( d ); ## Solve the ctmc prob = ctmc( Q_markov ); ## Compute the average queue length p = zeros(K, max(C)+1); # p(k,i+1) = prob that there are i requests at service center k for n=valid_populations pop_mix = qncmpopmix( n, C ); for cur_state=pop_mix' cur_idx = sub2cell( C, cur_state ); for k=1:K i=cur_state(k); p(k,i+1) += prob(cur_idx); endfor endfor endfor ## We can now compute all the performance measures U = R = Q = X = zeros(1,K); for k=1:K j = [0:m(k)-1]; U(k) = 1 - sum( ( m(k) - j ) ./ m(k) .* p(k,1+j) ); ##X(k) = U(k)/S(k); j = [1:C(k)]; Q(k) = sum( j .* p(k,1+j) ); ##R(k) = Q(k)/X(k); endfor X = U./S; R = Q./X; endfunction %!test %! S = [5 2.5]; %! P = [0 1; 1 0]; %! C = [3 3]; %! m = [1 1]; %! [U R Q X] = qnmarkov( 3, S, C, P, m ); %! assert( U, [0.9333 0.4667], 1e-4 ); %! assert( X, [0.1867 0.1867], 1e-4 ); %! assert( R, [12.1429 3.9286], 1e-4 ); ## Example 7.5 p. 292 Bolch et al. %!test %! S = [1/0.8 1/0.6 1/0.4]; %! P = [0.6 0.3 0.1; 0.2 0.3 0.5; 0.4 0.1 0.5]; %! C = [3 3 3]; %! [U R Q X] = qnmarkov( 3, S, C, P ); %! assert( U, [0.543 0.386 0.797], 1e-3 ); %! assert( Q, [0.873 0.541 1.585], 1e-3 ); ## Example 10.19, p. 551 Bolch et al. %!xtest %! S = [2 0.9]; %! C = [7 5]; %! P = [0 1; 1 0]; %! [U R Q X] = qnmarkov( 10, S, C, P ); %! assert( Q, [6.73 3.27], 1e-3 ); ## Example 8.1 p. 317 Bolch et al. %!test %! S = [1/0.8 1/0.6 1/0.4]; %! P = [(1-0.667-0.2) 0.667 0.2; 1 0 0; 1 0 0]; %! m = [2 3 1]; %! C = [3 3 3]; %! [U R Q X] = qnmarkov( 3, S, C, P, m ); %! assert( U, [0.590 0.350 0.473], 1e-3 ); %! assert( Q(1:2), [1.290 1.050], 1e-3 ); ## This is a simple test of an open QN with fixed capacity queues. There ## are two service centers, S1 and S2. C(1) = 2 and C(2) = 1. Transition ## probability from S1 to S2 is 1. Transition probability from S2 to S1 ## is p. %!test %! p = 0.5; # transition prob. from S2 to S1 %! mu = [1 2]; # Service rates %! C = [2 1]; # Capacities %! lambda = [0.5 0]; # arrival rate at service center 1 %! %! PP = [ 0 1; p 0 ]; %! [U R Q X] = qnmarkov( lambda, 1./mu, C, PP ); %! ## Now we generate explicitly the infinitesimal generator matrix %! ## of the underlying MC. %! ## 00 01 10 11 20 21 %! QQ = [ 0 0 lambda(1) 0 0 0; ... ## 00 %! mu(2)*(1-p) 0 mu(2)*p lambda(1) 0 0; ... ## 01 %! 0 mu(1) 0 0 lambda(1) 0; ... ## 10 %! 0 0 mu(2)*(1-p) 0 mu(2)*p lambda(1); ... ## 11 %! 0 0 0 mu(1) 0 0; ... ## 20 %! 0 0 0 0 mu(2)*(1-p) 0 ]; ## 21 %! ## Complete matrix %! sum_el = sum(QQ,2); %! QQ -= diag(sum_el); %! q = ctmc(QQ); %! ## Compare results %! assert( U(1), 1-sum(q([1, 2])), 1e-5 ); %! assert( U(2), 1-sum(q([1,3,5])), 1e-5 ); ## This is a closed network with fixed-capacity queues. The population ## size N is such that blocking never occurs, so this model can be ## analyzed using the conventional MVA algorithm. MVA and qnmarkov() ## must produce the same results. %!test %! P = [0 0.5 0.5; 1 0 0; 1 0 0]; %! C = [6 6 6]; %! S = [1 0.8 1.8]; %! N = 6; %! [U1 R1 Q1 X1] = qnclosed( N, S, qncsvisits(P) ); %! [U2 R2 Q2 X2] = qnmarkov( N, S, C, P ); %! assert( U1, U2, 1e-6 ); %! assert( R1, R2, 1e-6 ); %! assert( Q1, Q2, 1e-6 ); %! assert( X1, X2, 1e-6 ); ## return a linear index corresponding to index idx on a ## multidimensional vector of dimension(s) dim function i = sub2cell( dim, idx ) idx_cell = num2cell( idx+1 ); i = sub2ind( dim+1, idx_cell{:} ); endfunction queueing/inst/ctmcfpt.m0000664000175000017500000000620513356112402015055 0ustar morenomoreno## Copyright (C) 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} ctmcfpt (@var{Q}) ## @deftypefnx {Function File} {@var{m} =} ctmcfpt (@var{Q}, @var{i}, @var{j}) ## ## @cindex first passage times, CTMC ## @cindex CTMC ## @cindex continuous time Markov chain ## @cindex Markov chain, continuous time ## ## Compute mean first passage times for an irreducible continuous-time ## Markov chain. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{Q}(i,j) ## Infinitesimal generator matrix. @var{Q} is a @math{N \times N} ## square matrix where @code{@var{Q}(i,j)} is the transition rate from ## state @math{i} to state @math{j}, for @math{1 @leq{} i, j @leq{} N}, ## @math{i \neq j}. Transition rates must be nonnegative, and ## @math{\sum_{j=1}^N Q_{i j} = 0} ## ## @item @var{i} ## Initial state. ## ## @item @var{j} ## Destination state. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{M}(i,j) ## average time before state ## @var{j} is visited for the first time, starting from state @var{i}. ## We let @code{@var{M}(i,i) = 0}. ## ## @item m ## @var{m} is the average time before state @var{j} is visited for the first ## time, starting from state @var{i}. ## ## @end table ## ## @seealso{ctmcmtta} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function result = ctmcfpt( Q, i, j ) persistent epsilon = 10*eps; if ( nargin != 1 && nargin != 3 ) print_usage(); endif [N err] = ctmcchkQ(Q); (N>0) || ... error(err); if ( nargin == 1 ) result = zeros(N,N); for j=1:N QQ = Q; QQ(j,:) = 0; # make state j absorbing for i=1:N p0 = zeros(1,N); p0(i) = 1; result(i,j) = ctmcmtta(QQ,p0); endfor endfor else (isscalar(i) && i>=1 && j<=N) || error("i must be an integer in the range 1..%d", N); (isvector(j) && all(j>=1) && all(j<=N)) || error("j must be an integer or vector with elements in 1..%d", N); j = j(:)'; # make j a row vector Q(j,:) = 0; # make state(s) j absorbing p0 = zeros(1,N); p0(i) = 1; result = ctmcmtta(Q,p0); endif endfunction %!demo %! Q = [ -1.0 0.9 0.1; ... %! 0.1 -1.0 0.9; ... %! 0.9 0.1 -1.0 ]; %! M = ctmcfpt(Q) %! m = ctmcfpt(Q,1,3) %!test %! N = 10; %! Q = reshape(1:N^2,N,N); %! Q(1:N+1:end) = 0; %! Q -= diag(sum(Q,2)); %! M = ctmcfpt(Q); %! assert( all(diag(M) < 10*eps) ); queueing/inst/qnopenbsb.m0000664000175000017500000000313312762046576015423 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xu}, @var{Rl}, @var{Ru}] =} qnopenbsb (@var{lambda}, @dots{}) ## ## @cindex bounds, balanced system ## @cindex open network ## ## This function is deprecated. Please use @code{qnosbsb} instead. ## ## @seealso{qnosbsb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xu Rl Ru] = qnopenbsb( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnopenbsb is deprecated. Please use qnosbsb instead"); endif [Xl Xu Rl Ru] = qnosbsb( varargin{:} ); endfunction %!test %! fail( "qnopenbsb( 0.1, [] )", "vector" ); %! fail( "qnopenbsb( 0.1, [0 -1])", "nonnegative" ); %! fail( "qnopenbsb( 0, [1 2] )", "lambda" ); %! fail( "qnopenbsb( -1, [1 2])", "lambda" ); queueing/inst/engset.m0000664000175000017500000000670013023226572014707 0ustar morenomoreno## Copyright (C) 2014 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{B} =} engset (@var{A}, @var{m}, @var{n}) ## ## @cindex Engset loss formula ## ## Compute the Engset blocking probability @math{P_b(A, m, n)} for a system ## with a finite population of @math{n} users, @math{m} identical ## servers, no queue, individual service rate @math{\mu}, individual ## arrival rate @math{\lambda} (i.e., the time until a user tries to ## request service is exponentially distributed with mean @math{1 / ## \lambda}), and offered load @math{A = \lambda / \mu}. ## ## @tex ## @math{P_b(A, m, n)} is defined for @math{n > m} as: ## ## $$ ## P_b(A, m, n) = {{\displaystyle{A^m {n \choose m}}} \over {\displaystyle{\sum_{k=0}^m A^k {n \choose k}}}} ## $$ ## ## and is 0 if @math{n @leq{} m}. ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{A} ## Offered load, defined as @math{A = \lambda / \mu} where ## @math{\lambda} is the mean arrival rate and @math{\mu} the mean ## service rate of each individual server (real, @math{A > 0}). ## ## @item @var{m} ## Number of identical servers (integer, @math{m @geq{} 1}). Default @math{m = 1} ## ## @item @var{n} ## Number of requests (integer, @math{n @geq{} 1}). Default @math{n = 1} ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{B} ## The value @math{P_b(A, m, n)} ## ## @end table ## ## @var{A}, @var{m} or @math{n} can be vectors, and in this case, the ## results will be vectors as well. ## ## @seealso{erlangb, erlangc} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function P = engset(A, m, n) if ( nargin < 1 || nargin > 3 ) print_usage(); endif ( isnumeric(A) && all( A(:) > 0 ) ) || error("A must be positive"); if ( nargin < 2 ) m = 1; else ( isnumeric(m) && all( fix(m(:)) == m(:)) && all( m(:) > 0 ) ) || error("m must be a positive integer"); endif if ( nargin < 3 ) n = 1; else ( isnumeric(n) && all( fix(n(:)) == n(:)) && all( n(:) > 0 ) ) || error("n must be a positive integer"); endif [err A m n] = common_size(A, m, n); if ( err ) error("parameters are not of common size"); endif P = arrayfun( @__engset_compute, A, m, n); endfunction ## Compute P_b(A,m,n) recursively function P = __engset_compute(A, m, n) if ( m >= n ) P = 0.0; else P = 1.0; for i = 1:m P=(A*(n-i)*P)/(i+A*(n-i)*P); endfor endif endfunction %!test %! fail("erlangb(1, -1)", "positive"); %! fail("erlangb(-1, 1)", "positive"); %! fail("erlangb(1, 0)", "positive"); %! fail("erlangb(0, 1)", "positive"); %! fail("erlangb('foo',1)", "positive"); %! fail("erlangb(1,'bar')", "positive"); %! fail("erlangb([1 1],[1 1 1])","common size"); queueing/inst/qnomvisits.m0000664000175000017500000001076212762307122015641 0ustar morenomoreno## Copyright (C) 2012, 2013, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{V} =} qnomvisits (@var{P}, @var{lambda}) ## ## Compute the visit ratios to the service centers of an open multiclass network with @math{K} service centers and @math{C} customer classes. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(r,i,s,j) ## probability that a class @math{r} request which completed service at center @math{i} is ## routed to center @math{j} as a class @math{s} request. Class switching ## is supported. ## ## @item @var{lambda}(r,i) ## external arrival rate of class @math{r} requests to center @math{i}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{V}(r,i) ## visit ratio of class @math{r} requests at center @math{i}. ## ## @end table ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function V = qnomvisits( P, lambda ) if ( nargin != 2 ) print_usage(); endif ndims(P) == 4 || ... error("P must be a 4-dimensional matrix"); [C, K, C2, K2] = size( P ); (K == K2 && C == C2) || ... error( "P must be a [%d,%d,%d,%d] matrix", C, K, C, K); ( ndims(lambda) == 2 && [C,K] == size(lambda) ) || ... error( "lambda must be a %d x %d matrix", C, K ); all(lambda(:)>=0) || ... error(" lambda contains negative values" ); ## solve the traffic equations: V(s,j) = lambda(s,j) / lambda + sum_r ## sum_i V(r,i) * P(r,i,s,j), for all s,j where lambda is defined as ## sum_r sum_i lambda(r,i) A = eye(K*C) - reshape(P,[K*C K*C]); b = reshape(lambda / sum(lambda(:)), [1,K*C]); V = reshape(b/A, [C, K]); ## Make sure that no negative values appear (sometimes, numerical ## errors produce tiny negative values instead of zeros) V = max(0,V); endfunction %!test %! fail( "qnomvisits( zeros(3,3,3), [1 1 1] )", "matrix"); %!test %! C = 2; K = 4; %! P = zeros(C,K,C,K); %! # class 1 routing %! P(1,1,1,1) = .05; %! P(1,1,1,2) = .45; %! P(1,1,1,3) = .5; %! P(1,2,1,1) = 0.1; %! P(1,3,1,1) = 0.2; %! # class 2 routing %! P(2,1,2,1) = .01; %! P(2,1,2,3) = .5; %! P(2,1,2,4) = .49; %! P(2,3,2,1) = 0.2; %! P(2,4,2,1) = 0.16; %! lambda = [0.1 0 0 0.1 ; 0 0 0.2 0.1]; %! lambda_sum = sum(lambda(:)); %! V = qnomvisits(P, lambda); %! assert( all(V(:)>=0) ); %! for i=1:K %! for c=1:C %! assert(V(c,i), lambda(c,i) / lambda_sum + sum(sum(V .* P(:,:,c,i))), 1e-5); %! endfor %! endfor %!test %! # example 7.7 p. 304 Bolch et al. %! # Note that the book uses a slightly different notation than %! # what we use here. Specifically, the book defines the routing %! # probabilities as P(i,r,j,s) (i,j are service centers, r,s are job %! # classes) while the queueing package uses P(r,i,s,j). %! # A more serious problem arises in the definition of external arrivals. %! # The computation of V(r,i) as given in the book (called e_ir %! # in Eq 7.14) is performed in terms of P_{0, js}, defined as %! # "the probability in an open network that a job from outside the network %! # enters the jth node as a job of the sth class" (p. 267). This is %! # compliant with eq. 7.12 where the external class r arrival rate at center %! # i is computed as \lambda * P_{0,ir}. However, example 7.7 wrongly %! # defines P_{0,11} = P_{0,12} = 1, instead of P_{0,11} = P_{0,12} = 0.5 %! # Therefore the resulting visit ratios they obtain must be divided by two. %! P = zeros(2,3,2,3); %! lambda = S = zeros(2,3); %! P(1,1,1,2) = 0.4; %! P(1,1,1,3) = 0.3; %! P(1,2,1,1) = 0.6; %! P(1,2,1,3) = 0.4; %! P(1,3,1,1) = 0.5; %! P(1,3,1,2) = 0.5; %! P(2,1,2,2) = 0.3; %! P(2,1,2,3) = 0.6; %! P(2,2,2,1) = 0.7; %! P(2,2,2,3) = 0.3; %! P(2,3,2,1) = 0.4; %! P(2,3,2,2) = 0.6; %! lambda(1,1) = lambda(2,1) = 1; %! V = qnomvisits(P,lambda); %! assert( V, [ 3.333 2.292 1.917; 10 8.049 8.415] ./ 2, 1e-3); queueing/inst/qsmm1.m0000664000175000017500000000647213356113037014466 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmm1 (@var{lambda}, @var{mu}) ## ## @cindex @math{M/M/1} system ## ## Compute utilization, response time, average number of requests and throughput for a @math{M/M/1} queue. ## ## @tex ## The steady-state probability @math{\pi_k} that there are @math{k} ## jobs in the system, @math{k \geq 0}, can be computed as: ## ## $$ ## \pi_k = (1-\rho)\rho^k ## $$ ## ## where @math{\rho = \lambda/\mu} is the server utilization. ## ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate (@code{@var{lambda} @geq{} 0}). ## ## @item @var{mu} ## Service rate (@code{@var{mu} > @var{lambda}}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Server utilization ## ## @item @var{R} ## Server response time ## ## @item @var{Q} ## Average number of requests in the system ## ## @item @var{X} ## Server throughput. If the system is ergodic (@code{@var{mu} > ## @var{lambda}}), we always have @code{@var{X} = @var{lambda}} ## ## @item @var{p0} ## Steady-state probability that there are no requests in the system. ## ## @end table ## ## @var{lambda} and @var{mu} can be vectors of the same size. In this ## case, the results will be vectors as well. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks ## and Markov Chains: Modeling and Performance Evaluation with Computer ## Science Applications}, Wiley, 1998, Section 6.3 ## @end itemize ## ## @seealso{qsmmm, qsmminf, qsmmmk} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0] = qsmm1( lambda, mu ) if ( nargin != 2 ) print_usage(); endif ( isvector(lambda) && isvector(mu) ) || ... error( "lambda and mu must be vectors" ); [ err lambda mu ] = common_size( lambda, mu ); if ( err ) error( "parameters are of incompatible size" ); endif lambda = lambda(:)'; mu = mu(:)'; all( lambda >= 0 ) || ... error( "lambda must be >= 0" ); all( mu > lambda ) || ... error( "The system is not ergodic" ); U = rho = lambda ./ mu; # utilization p0 = 1-rho; Q = rho ./ (1-rho); R = 1 ./ ( mu .* (1-rho) ); X = lambda; endfunction %!test %! fail( "qsmm1(10,5)", "not ergodic" ); %! fail( "qsmm1([2 2], [1 1 1])", "incompatible size"); %!test %! [U R Q X P0] = qsmm1(0, 1); %! assert( U, 0 ); %! assert( R, 1 ); %! assert( Q, 0 ); %! assert( X, 0 ); %! assert( P0, 1 ); queueing/inst/qsmmmk.m0000664000175000017500000001527113356117371014737 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pK}] =} qsmmmk (@var{lambda}, @var{mu}, @var{m}, @var{K}) ## ## @cindex @math{M/M/m/K} system ## ## Compute utilization, response time, average number of requests and ## throughput for a @math{M/M/m/K} finite capacity system. In a ## @math{M/M/m/K} system there are @math{m \geq 1} identical service centers ## sharing a fixed-capacity queue. At any time, at most @math{K @geq{} m} requests can be in the system, including those being served. The maximum queue length ## is @math{K-m}. This function generates and ## solves the underlying CTMC. ## ## @tex ## ## The steady-state probability @math{\pi_k} that there are @math{k} ## jobs in the system, @math{0 @leq{} k @leq{} K}, is: ## ## $$ ## \pi_k = \cases{ \displaystyle{{\rho^k \over k!} \pi_0} & if $0 \leq k \leq m$;\cr ## \displaystyle{{\rho^m \over m!} \left( \rho \over m \right)^{k-m} \pi_0} & if $m < k \leq K$\cr} ## $$ ## ## where @math{\rho = \lambda/\mu} is the offered load. The probability ## @math{\pi_0} that the system is empty can be computed by considering ## that all probabilities must sum to one: @math{\sum_{k=0}^K \pi_k = 1}, ## which gives: ## ## $$ ## \pi_0 = \left[ \sum_{k=0}^m {\rho^k \over k!} + {\rho^m \over m!} \sum_{k=m+1}^K \left( {\rho \over m}\right)^{k-m} \right]^{-1} ## $$ ## ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate (@code{@var{lambda}>0}) ## ## @item @var{mu} ## Service rate (@code{@var{mu}>0}) ## ## @item @var{m} ## Number of servers (@code{@var{m} @geq{} 1}) ## ## @item @var{K} ## Maximum number of requests allowed in the system, ## including those being served (@code{@var{K} @geq{} @var{m}}) ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Service center utilization ## ## @item @var{R} ## Service center response time ## ## @item @var{Q} ## Average number of requests in the system ## ## @item @var{X} ## Service center throughput ## ## @item @var{p0} ## Steady-state probability that there are no requests in the system. ## ## @item @var{pK} ## Steady-state probability that there are @var{K} requests in the system ## (i.e., probability that the system is full). ## ## @end table ## ## @var{lambda}, @var{mu}, @var{m} and @var{K} can be either scalars, or ## vectors of the same size. In this case, the results will be vectors ## as well. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks ## and Markov Chains: Modeling and Performance Evaluation with Computer ## Science Applications}, Wiley, 1998, Section 6.6 ## @end itemize ## ## @seealso{qsmm1,qsmminf,qsmmm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pK] = qsmmmk( lambda, mu, m, K ) if ( nargin != 4 ) print_usage(); endif ( isvector(lambda) && isvector(mu) && isvector(m) && isvector(K) ) || ... error( "lambda, mu, m, K must be vectors" ); lambda = lambda(:)'; # make lambda a row vector mu = mu(:)'; # make mu a row vector m = m(:)'; # make m a row vector K = K(:)'; # make K a row vector [err lambda mu m K] = common_size( lambda, mu, m, K ); if ( err ) error( "Parameters are not of common size" ); endif all( K>0 ) || ... error( "k must be strictly positive" ); all( m>0 ) && all( m <= K ) || ... error( "m must be in the range 1:k" ); all( lambda>0 ) && all( mu>0 ) || ... error( "lambda and mu must be >0" ); U = R = Q = X = p0 = pK = 0*lambda; for i=1:length(lambda) ## Build and solve the birth-death process describing the M/M/m/k system birth_rate = lambda(i)*ones(1,K(i)); death_rate = [ linspace(1,m(i),m(i))*mu(i) ones(1,K(i)-m(i))*m(i)*mu(i) ]; p = ctmc(ctmcbd(birth_rate, death_rate)); p0(i) = p(1); pK(i) = p(1+K(i)); j = [1:K(i)]; Q(i) = dot( p(1+j),j ); endfor ## Compute other performance measures X = lambda.*(1-pK); U = X ./ (m .* mu ); R = Q ./ X; endfunction %!test %! lambda = mu = m = 1; %! k = 10; %! [U R Q X p0] = qsmmmk(lambda,mu,m,k); %! assert( Q, k/2, 1e-7 ); %! assert( U, 1-p0, 1e-7 ); %!test %! lambda = [1 0.8 2 9.2 0.01]; %! mu = lambda + 0.17; %! k = 12; %! [U1 R1 Q1 X1] = qsmm1k(lambda,mu,k); %! [U2 R2 Q2 X2] = qsmmmk(lambda,mu,1,k); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %! assert( X1, X2, 1e-5 ); %! #assert( [U1 R1 Q1 X1], [U2 R2 Q2 X2], 1e-5 ); %!test %! lambda = 0.9; %! mu = 0.75; %! k = 10; %! [U1 R1 Q1 X1 p01] = qsmmmk(lambda,mu,1,k); %! [U2 R2 Q2 X2 p02] = qsmm1k(lambda,mu,k); %! assert( [U1 R1 Q1 X1 p01], [U2 R2 Q2 X2 p02], 1e-5 ); %!test %! lambda = 0.8; %! mu = 0.85; %! m = 3; %! k = 5; %! [U1 R1 Q1 X1 p0] = qsmmmk( lambda, mu, m, k ); %! birth = lambda*ones(1,k); %! death = [ mu*linspace(1,m,m) mu*m*ones(1,k-m) ]; %! q = ctmc(ctmcbd( birth, death )); %! U2 = dot( q, min( 0:k, m )/m ); %! assert( U1, U2, 1e-4 ); %! Q2 = dot( [0:k], q ); %! assert( Q1, Q2, 1e-4 ); %! assert( p0, q(1), 1e-4 ); %!test %! # This test comes from an example I found on the web %! lambda = 40; %! mu = 30; %! m = 3; %! k = 7; %! [U R Q X p0] = qsmmmk( lambda, mu, m, k ); %! assert( p0, 0.255037, 1e-6 ); %! assert( R, 0.036517, 1e-6 ); %!test %! # This test comes from an example I found on the web %! lambda = 50; %! mu = 10; %! m = 4; %! k = 6; %! [U R Q X p0 pk] = qsmmmk( lambda, mu, m, k ); %! assert( pk, 0.293543, 1e-6 ); %!test %! # This test comes from an example I found on the web %! lambda = 3; %! mu = 2; %! m = 2; %! k = 5; %! [U R Q X p0 pk] = qsmmmk( lambda, mu, m, k ); %! assert( p0, 0.179334, 1e-6 ); %! assert( pk, 0.085113, 1e-6 ); %! assert( Q, 2.00595, 1e-5 ); %! assert( R-1/mu, 0.230857, 1e-6 ); # waiting time in the queue queueing/inst/ctmc_bd.m0000664000175000017500000000264112762046576015032 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{Q} =} ctmc_bd (@var{b}, @var{d}) ## ## This function is deprecated. Please use @code{ctmcbd} instead. ## ## @seealso{ctmcbd} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function Q = ctmc_bd( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "ctmc_bd is deprecated. Please use ctmcbd instead"); endif Q = ctmcbd( varargin{:} ); endfunction %!test %! birth = [ 1 1 1 ]; %! death = [ 2 2 2 ]; %! Q = ctmc_bd( birth, death ); %! assert( ctmc(Q), [ 8/15 4/15 2/15 1/15 ], 1e-5 ); queueing/inst/dtmctaexps.m0000664000175000017500000000521213356110463015573 0ustar morenomoreno## Copyright (C) 2012, 2014, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} dtmctaexps (@var{P}, @var{n}, @var{p0}) ## @deftypefnx {Function File} {@var{M} =} dtmctaexps (@var{P}, @var{p0}) ## ## @cindex time-alveraged sojourn time, DTMC ## @cindex discrete time Markov chain ## @cindex Markov chain, discrete time ## @cindex DTMC ## ## Compute the @emph{time-averaged sojourn times} @code{@var{M}(i)}, ## defined as the fraction of time spent in state @math{i} during the ## first @math{n} transitions (or until absorption), assuming that the ## state occupancy probabilities at time 0 are @var{p0}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## @math{N \times N} transition probability matrix. ## ## @item @var{} ## Number of transitions during which the time-averaged expected sojourn times ## are computed (@math{@var{n} @geq{} 0}). if @math{@var{n} = 0}, ## returns @var{p0}. ## ## @item @var{p0}(i) ## Initial state occupancy probabilities. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{M}(i) ## If this function is called with three arguments, @code{@var{M}(i)} is ## the expected fraction of steps @math{@{0, @dots{}, n@}} spent in ## state @math{i}, assuming that the state occupancy probabilities at ## time zero are @var{p0}. If this function is called with two ## arguments, @code{@var{M}(i)} is the expected fraction of steps spent ## in state @math{i} until absorption. ## ## @end table ## ## @seealso{dtmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function M = dtmctaexps( P, varargin ) persistent epsilon = 10*eps; if ( nargin < 2 || nargin > 3 ) print_usage(); endif L = dtmcexps(P,varargin{:}); M = L ./ sum(L); endfunction %!test %! P = dtmcbd([1 1 1 1], [0 0 0 0]); %! p0 = [1 0 0 0 0]; %! L = dtmctaexps(P,p0); %! assert( L, [.25 .25 .25 .25 0], 10*eps ); queueing/inst/ctmcbd.m0000664000175000017500000000705013356111236014654 0ustar morenomoreno## Copyright (C) 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{Q} =} ctmcbd (@var{b}, @var{d}) ## ## @cindex Markov chain, continuous time ## @cindex continuous time Markov chain ## @cindex CTMC ## @cindex birth-death process, CTMC ## ## Returns the infinitesimal generator matrix @math{Q} for a ## continuous birth-death process over the finite state space ## @math{@{1, @dots{}, N@}}. For each @math{i=1, @dots{}, N-1}, ## @code{@var{b}(i)} is the transition rate from state @math{i} to ## state @math{i+1}, and @code{@var{d}(i)} is the transition rate from state ## @math{i+1} to state @math{i}. ## ## Matrix @math{\bf Q} is therefore defined as: ## ## @tex ## $$ \pmatrix{ -\lambda_1 & \lambda_1 & & & & \cr ## \mu_1 & -(\mu_1 + \lambda_2) & \lambda_2 & & \cr ## & \mu_2 & -(\mu_2 + \lambda_3) & \lambda_3 & & \cr ## \cr ## & & \ddots & \ddots & \ddots & & \cr ## \cr ## & & & \mu_{N-2} & -(\mu_{N-2}+\lambda_{N-1}) & \lambda_{N-1} \cr ## & & & & \mu_{N-1} & -\mu_{N-1} } ## $$ ## @end tex ## @ifnottex ## ## @example ## @group ## / \ ## | -b(1) b(1) | ## | d(1) -(d(1)+b(2)) b(2) | ## | d(2) -(d(2)+b(3)) b(3) | ## | | ## | ... ... ... | ## | | ## | d(N-2) -(d(N-2)+b(N-1)) b(N-1) | ## | d(N-1) -d(N-1) | ## \ / ## @end group ## @end example ## @end ifnottex ## ## @noindent where @math{\lambda_i} and @math{\mu_i} are the birth and ## death rates, respectively. ## ## @seealso{dtmcbd} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function Q = ctmcbd( birth, death ) if ( nargin != 2 ) print_usage(); endif ( isvector( birth ) && isvector( death ) ) || ... error( "birth and death must be vectors" ); birth = birth(:); # make birth a column vector death = death(:); # make death a column vector size_equal( birth, death ) || ... error( "birth and death rates must have the same length" ); all( birth >= 0 ) || ... error( "birth rates must be >= 0" ); all( death >= 0 ) || ... error( "death rates must be >= 0" ); ## builds the infinitesimal generator matrix Q = diag( birth, 1 ) + diag( death, -1 ); Q -= diag( sum(Q,2) ); endfunction %!test %! birth = [ 1 1 1 ]; %! death = [ 2 2 2 ]; %! Q = ctmcbd( birth, death ); %! assert( ctmc(Q), [ 8/15 4/15 2/15 1/15 ], 1e-5 ); queueing/inst/dtmc_exps.m0000664000175000017500000000324412762046576015425 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{L} =} dtmc_exps (@var{P}, @var{n}, @var{p0}) ## @deftypefnx {Function File} {@var{L} =} dtmc_exps (@var{P}, @var{p0}) ## ## This function is deprecated. Please use @code{dtmcexps} instead. ## ## @seealso{dtmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function L = dtmc_exps ( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_exps is deprecated. Please use dtmcexps instead"); endif L = dtmcexps( varargin{:} ); endfunction %!test %! P = dtmc_bd([1 1 1 1], [0 0 0 0]); %! L = dtmc_exps(P,[1 0 0 0 0]); %! t = dtmc_mtta(P,[1 0 0 0 0]); %! assert( L, [1 1 1 1 0] ); %! assert( sum(L), t ); %!test %! P = dtmc_bd(linspace(0.1,0.4,5),linspace(0.4,0.1,5)); %! p0 = [1 0 0 0 0 0]; %! L = dtmc_exps(P,0,p0); %! assert( L, p0 );queueing/inst/qncmnpop.m0000664000175000017500000000571413356121601015255 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{H} =} qncmnpop (@var{N}) ## ## @cindex population mix ## @cindex closed network, multiple classes ## ## Given a network with @math{C} customer classes, this function ## computes the number of @math{k}-mixes @code{@var{H}(r,k)} that can ## be constructed by the multiclass MVA algorithm by allocating ## @math{k} customers to the first @math{r} classes. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N}(c) ## number of class-@math{c} requests in the system. The total number ## of requests in the network is @code{sum(@var{N})}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{H}(r,k) ## is the number of @math{k} mixes that can be constructed allocating ## @math{k} customers to the first @math{r} classes. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item Zahorjan, J. and Wong, E. @cite{The solution of separable queueing ## network models using mean value analysis}. SIGMETRICS ## Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI ## @uref{http://doi.acm.org/10.1145/1010629.805477, 10.1145/1010629.805477} ## @end itemize ## ## @seealso{qncmmva,qncmpopmix} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function H = qncmnpop( N ) (isvector(N) && all( N > 0 ) ) || ... error( "N must be a vector of strictly positive integers" ); N = N(:)'; # make N a row vector Ns = sum(N); R = length(N); ## The algorithm as described in the reference (see documentation in ## PDF format) seems incorrect: in the implementation above the ## @code{TOTAL_POP} variable is initialized with @code{@var{N}(1)}, ## instead of 0 as in the paper. Moreover, here the @code{TOTAL_POP} ## variable is incremented by @code{@var{N}(r)} at each iteration ## (instead of @code{@var{N}(r-1)} as in the paper) total_pop = N(1); H = zeros(R, Ns+1); H(1,1:N(1)+1) = 1; for r=2:R total_pop += N(r); for n=0:total_pop range = max(0,n-N(r)) : n; H(r,n+1) = sum( H(r-1, range+1 ) ); endfor endfor endfunction %!test %! H = qncmnpop( [1 2 2] ); %! assert( H, [1 1 0 0 0 0; 1 2 2 1 0 0; 1 3 5 5 3 1] ); queueing/inst/ctmc_check_Q.m0000664000175000017500000000377612762046576016014 0ustar morenomoreno## Copyright (C)2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{result} @var{err}] =} ctmc_check_Q (@var{Q}) ## ## This function is deprecated. Please use @code{ctmcchkQ} instead ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [result err] = ctmc_check_Q( Q ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "ctmc_check_Q is deprecated. Please use ctmcchkQ instead"); endif [result err] = ctmcchkQ( Q ); endfunction %!test %! Q = [0]; %! [result err] = ctmc_check_Q(Q); %! assert( result, 1 ); %! assert( err, "" ); %!test %! N = 10; %! Q = ctmc_bd(rand(1,N-1),rand(1,N-1)); %! [result err] = ctmc_check_Q(Q); %! assert( result, N ); %! assert( err, "" ); %!test %! Q = [1 2 3; 4 5 6]; %! [result err] = ctmc_check_Q(Q); %! assert( result, 0 ); %! assert( index(err, "square") > 0 ); %!test %! N = 10; %! Q = ctmc_bd(rand(1,N-1),rand(1,N-1)); %! Q(2,1) = -1; %! [result err] = ctmc_check_Q(Q); %! assert( result, 0 ); %! assert( index(err, "infinitesimal") > 0 ); %!test %! N = 10; %! Q = ctmc_bd(rand(1,N-1),rand(1,N-1)); %! Q(1,1) += 7; %! [result err] = ctmc_check_Q(Q); %! assert( result, 0 ); %! assert( index(err, "infinitesimal") > 0 ); queueing/inst/qnclosedgb.m0000664000175000017500000000305312762046576015556 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Ql}, @var{Qu}] =} qnclosedgb (@var{N}, @var{D}, @var{Z}) ## ## This function is deprecated. Please use @code{qncsgb} instead. ## ## @seealso{qncsgb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper Q_lower Q_upper] = qnclosedgb( N, D, Z ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "Function qnclosedgb is deprecated. Please use qncsgb instead"); endif if ( nargin < 3 ) [X_lower X_upper R_lower R_upper Q_lower Q_upper] = qncsgb( N, D ); else [X_lower X_upper R_lower R_upper Q_lower Q_upper] = qncsgb( N, D, ones(size(D)), ones(size(D)), Z); endif endfunction queueing/inst/qncsmvaap.m0000664000175000017500000001760413356120532015416 0ustar morenomoreno## Copyright (C) 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}, @var{iter_max}) ## ## @cindex Mean Value Analysys (MVA), approximate ## @cindex MVA, approximate ## @cindex approximate MVA ## @cindex closed network, single class ## @cindex closed network, approximate analysis ## ## Analyze closed, single class queueing networks using the Approximate ## Mean Value Analysis (MVA) algorithm. This function is based on ## approximating the number of customers seen at center @math{k} when a ## new request arrives as @math{Q_k(N) \times (N-1)/N}. This function ## only handles single-server and delay centers; if your network ## contains general load-dependent service centers, use the function ## @code{qncsmvald} instead. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## Population size (number of requests in the system, @code{@var{N} > 0}). ## ## @item @var{S}(k) ## mean service time on server @math{k} ## (@code{@var{S}(k)>0}). ## ## @item @var{V}(k) ## average number of visits to service center ## @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k} ## (if @var{m} is a scalar, all centers have that number of servers). If ## @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); if ## @code{@var{m}(k) == 1}, center @math{k} is a regular queueing ## center (FCFS, LCFS-PR or PS) with one server (default). This function ## does not support multiple server nodes (@code{@var{m}(k) > 1}). ## ## @item @var{Z} ## External delay for customers (@code{@var{Z} @geq{} 0}). Default is 0. ## ## @item @var{tol} ## Stopping tolerance. The algorithm stops when the maximum relative ## difference between the new and old value of the queue lengths ## @var{Q} becomes less than the tolerance. Default is @math{10^{-5}}. ## ## @item @var{iter_max} ## Maximum number of iterations (@code{@var{iter_max}>0}. ## The function aborts if convergenge is not reached within the maximum ## number of iterations. Default is 100. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## If @math{k} is a FCFS, LCFS-PR or PS node (@code{@var{m}(k) == 1}), ## then @code{@var{U}(k)} is the utilization of center @math{k}. If ## @math{k} is an IS node (@code{@var{m}(k) < 1}), then ## @code{@var{U}(k)} is the @emph{traffic intensity} defined as ## @code{@var{X}(k)*@var{S}(k)}. ## ## @item @var{R}(k) ## response time at center @math{k}. ## The system response time @var{Rsys} ## can be computed as @code{@var{Rsys} = @var{N}/@var{Xsys} - Z} ## ## @item @var{Q}(k) ## average number of requests at center @math{k}. The number of ## requests in the system can be computed either as ## @code{sum(@var{Q})}, or using the formula ## @code{@var{N}-@var{Xsys}*@var{Z}}. ## ## @item @var{X}(k) ## center @math{k} throughput. The system throughput @var{Xsys} can be ## computed as @code{@var{Xsys} = @var{X}(1) / @var{V}(1)} ## ## @end table ## ## @strong{REFERENCES} ## ## This implementation is based on Edward D. Lazowska, John Zahorjan, ## G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System ## Performance: Computer System Analysis Using Queueing Network Models}, ## Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 6.4.2.2 ("Approximate Solution Techniques"). ## ## @seealso{qncsmva,qncsmvald} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncsmvaap( N, S, V, m, Z, tol, iter_max ) if ( nargin < 3 || nargin > 7 ) print_usage(); endif isscalar(N) && N >= 0 || ... error( "N must be >= 0" ); isvector(S) || ... error( "S must be a vector" ); isvector(V) || ... error( "V must be a vector" ); S = S(:)'; # make S a row vector V = V(:)'; # make V a row vector K = length(S); # Number of servers if ( nargin < 4 ) m = ones(1,K); else isvector(m) || ... error( "m must be a vector" ); m = m(:)'; # make m a row vector endif [err S V m] = common_size(S, V, m); (err == 0) || ... error( "S, V and m are of incompatible size" ); all(S>=0) || ... error( "S must be a vector >= 0" ); all(V>=0) || ... error( "V must be a vector >= 0" ); all(m<=1) || ... error( "Vector m must be <= 1 (this function supports IS and single-server nodes only)" ); if ( nargin < 5 ) Z = 0; else (isscalar(Z) && Z >= 0) || ... error( "Z must be >= 0" ); endif if ( nargin < 6 ) tol = 1e-5; else ( isscalar(tol) && tol>0 ) || ... error("tol must be a positive scalar"); endif if ( nargin < 7 ) iter_max = 100; else ( isscalar(iter_max) && iter_max > 0 ) || ... error("iter_max must be a positive integer"); endif U = R = Q = X = zeros( 1, K ); ## Trivial case of empty population: just return all zeros if ( N == 0 ) return; endif Q = N/K * ones(1,K); # initialize queue lengths iter = 0; do iter++; Qold = Q; A = (N-1)/N * Q; R = S.*(1+A.*(m==1)); Rs = dot(V,R); Xs = N/(Z+Rs); Q = Xs*(V.*R); err = norm((Q-Qold)./Qold, "inf"); until (err < tol || iter>iter_max); if ( iter > iter_max ) warning( "qncsmvaap(): Convergence not reached after %d iterations", iter_max ); endif X = Xs * V; U = X .* S; endfunction %!test %! fail( "qncsmvaap()", "Invalid" ); %! fail( "qncsmvaap( 10, [1 2], [1 2 3] )", "S, V and m" ); %! fail( "qncsmvaap( 10, [-1 1], [1 1] )", ">= 0" ); %! fail( "qncsmvaap( 10, [1 2], [1 2], [1 2] )", "supports"); %! fail( "qncsmvaap( 10, [1 2], [1 2], [1 1], 0, -1)", "tol"); %!test %! # Example p. 117 Lazowska et al. %! S = [0.605 2.1 1.35]; %! V = [1 1 1]; %! N = 3; %! Z = 15; %! m = 1; %! [U R Q X] = qncsmvaap(N, S, V, m, Z); %! Rs = dot(V,R); %! Xs = N/(Z+Rs); %! assert( Q, [0.0973 0.4021 0.2359], 1e-3 ); %! assert( Xs, 0.1510, 1e-3 ); %! assert( Rs, 4.87, 1e-3 ); %!demo %! S = [ 0.125 0.3 0.2 ]; %! V = [ 16 10 5 ]; %! N = 30; %! m = ones(1,3); %! Z = 4; %! Xmva = Xapp = Rmva = Rapp = zeros(1,N); %! for n=1:N %! [U R Q X] = qncsmva(n,S,V,m,Z); %! Xmva(n) = X(1)/V(1); %! Rmva(n) = dot(R,V); %! [U R Q X] = qncsmvaap(n,S,V,m,Z); %! Xapp(n) = X(1)/V(1); %! Rapp(n) = dot(R,V); %! endfor %! subplot(2,1,1); %! plot(1:N, Xmva, ";Exact;", "linewidth", 2, 1:N, Xapp, "x;Approximate;", "markersize", 7); %! legend("location","southeast"); legend("boxoff"); %! ylabel("Throughput X(n)"); %! subplot(2,1,2); %! plot(1:N, Rmva, ";Exact;", "linewidth", 2, 1:N, Rapp, "x;Approximate;", "markersize", 7); %! legend("location","southeast"); legend("boxoff"); %! ylabel("Response Time R(n)"); %! xlabel("Number of Requests n"); queueing/inst/qnclosedsinglemva.m0000664000175000017500000000322712762046576017156 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qnclosedsinglemva (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qnclosedsinglemva (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qnclosedsinglemva (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## ## This function is deprecated. Please use @code{qncsmva} instead. ## ## @seealso{qncsmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X G] = qnclosedsinglemva( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnclosedsinglemva is deprecated. Please use qncsmva instead"); endif [U R Q X G] = qncsmva( varargin{:} ); endfunction queueing/inst/qncmmva.m0000664000175000017500000007460413356133663015103 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S} ) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{P}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{P}, @var{r}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{P}, @var{r}, @var{m}) ## ## @cindex Mean Value Analysys (MVA) ## @cindex closed network, multiple classes ## @cindex multiclass network, closed ## ## Compute steady-state performance measures for closed, multiclass ## queueing networks using the Mean Value Analysys (MVA) algorithm. ## ## Queueing policies at service centers can be any of the following: ## ## @table @strong ## ## @item FCFS ## (First-Come-First-Served) customers are served in order of arrival; ## multiple servers are allowed. For this kind of queueing discipline, ## average service times must be class-independent. ## ## @item PS ## (Processor Sharing) customers are served in parallel by a single ## server, each customer receiving an equal share of the service rate. ## ## @item LCFS-PR ## (Last-Come-First-Served, Preemptive Resume) customers are served in ## reverse order of arrival by a single server and the last arrival ## preempts the customer in service who will later resume service at the ## point of interruption. ## ## @item IS ## (Infinite Server) customers are delayed independently of other ## customers at the service center (there is effectively an infinite ## number of servers). ## ## @end table ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N}(c) ## number of class @math{c} requests; @code{@var{N}(c) @geq{} 0}. If ## class @math{c} has no requests (@code{@var{N}(c) == 0}), then for ## all @var{k}, this function returns ## @code{@var{U}(c,k) = @var{R}(c,k) = @var{Q}(c,k) = @var{X}(c,k) = 0} ## ## @item @var{S}(c,k) ## mean service time for class @math{c} requests at center @math{k} ## (@code{@var{S}(c,k) @geq{} 0}). If the service time at center ## @math{k} is class-dependent, then center @math{k} is assumed ## to be of type @math{-/G/1}--PS (Processor Sharing). If center ## @math{k} is a FCFS node (@code{@var{m}(k)>1}), then the service ## times @strong{must} be class-independent, i.e., all classes ## @strong{must} have the same service time. ## ## @item @var{V}(c,k) ## average number of visits of class @math{c} requests at ## center @math{k}; @code{@var{V}(c,k) @geq{} 0}, default is 1. ## @strong{If you pass this argument, class switching is not allowed} ## ## @item @var{P}(r,i,s,j) ## probability that a class @math{r} request completing service at center ## @math{i} is routed to center @math{j} as a class @math{s} request; the ## reference stations for each class are specified with the paramter ## @var{r}. @strong{If you pass argument @var{P}, class switching is ## allowed}; however, you can not specify any external delay (i.e., ## @var{Z} must be zero) and all servers must be fixed-rate or ## infinite-server nodes (@code{@var{m}(k) @leq{} 1} for all ## @math{k}). ## ## @item @var{r}(c) ## reference station for class @math{c}. If omitted, station 1 is the ## reference station for all classes. See @command{qncmvisits}. ## ## @item @var{m}(k) ## If @code{@var{m}(k)<1}, then center @math{k} is assumed to be a delay ## center (IS node @math{-/G/\infty}). If @code{@var{m}(k)==1}, then ## service center @math{k} is a regular queueing center ## (@math{M/M/1}--FCFS, @math{-/G/1}--LCFS-PR or @math{-/G/1}--PS). ## Finally, if @code{@var{m}(k)>1}, center @math{k} is a ## @math{M/M/m}--FCFS center with @code{@var{m}(k)} identical servers. ## Default is @code{@var{m}(k)=1} for each @math{k}. ## ## @item @var{Z}(c) ## class @math{c} external delay (think time); @code{@var{Z}(c) @geq{} ## 0}. Default is 0. This parameter can not be used if you pass a ## routing matrix as the second parameter of @code{qncmmva}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(c,k) ## If @math{k} is a FCFS, LCFS-PR or PS node (@code{@var{m}(k) @geq{} ## 1}), then @code{@var{U}(c,k)} is the class @math{c} utilization at ## center @math{k}, @math{0 @leq{} U(c,k) @leq{} 1}. If @math{k} is an ## IS node, then @code{@var{U}(c,k)} is the class @math{c} @emph{traffic ## intensity} at center @math{k}, defined as @code{@var{U}(c,k) = ## @var{X}(c,k)*@var{S}(c,k)}. In this case the value of ## @code{@var{U}(c,k)} may be greater than one. ## ## @item @var{R}(c,k) ## class @math{c} response time at center @math{k}. The class @math{c} ## @emph{residence time} at center @math{k} is @code{@var{R}(c,k) * ## @var{C}(c,k)}. The total class @math{c} system response time is ## @code{dot(@var{R}, @var{V}, 2)}. ## ## @item @var{Q}(c,k) ## average number of class @math{c} requests at center @math{k}. The ## total number of requests at center @math{k} is ## @code{sum(@var{Q}(:,k))}. The total number of class @math{c} ## requests in the system is @code{sum(@var{Q}(c,:))}. ## ## @item @var{X}(c,k) ## class @math{c} throughput at center @math{k}. The class @math{c} ## throughput can be computed as @code{@var{X}(c,1) / @var{V}(c,1)}. ## ## @end table ## ## @strong{NOTES} ## ## If the function call specifies the visit ratios @var{V}, then class ## switching is @strong{not} allowed. If the function call specifies ## the routing probability matrix @var{P}, then class switching ## @strong{is} allowed; however, in this case all nodes are restricted ## to be fixed rate servers or delay centers: multiple-server and ## general load-dependent centers are not supported. ## ## In presence of load-dependent servers (e.g., if @code{@var{m}(i)>1} ## for some @math{i}), the MVA algorithm is known to be numerically ## unstable. Generally this problem shows up as negative values for the ## computed response times or utilizations. This is not a problem with the ## @code{queueing} package, but with the MVA algorithm; ## as such, there is no known workaround at the moment (aoart from using a ## different solution technique, if available). This function prints a ## warning if it detects numerical problems; you can disable the warning ## with the command @code{warning("off", "qn:numerical-instability")}. ## ## Given a network with @math{K} service centers, @math{C} job classes ## and population vector @math{{\bf N}=\left[N_1, @dots{}, N_C\right]}, the MVA ## algorithm requires space @math{O(C \prod_i (N_i + 1))}. The time ## complexity is @math{O(CK\prod_i (N_i + 1))}. This implementation is ## slightly more space-efficient (see details in the code). While the ## space requirement can be mitigated by using some optimizations, the ## time complexity can not. If you need to analyze large closed networks ## you should consider the @command{qncmmvaap} function, which implements ## the approximate MVA algorithm. Note however that @command{qncmmvaap} ## will only provide approximate results. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed ## Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April ## 1980, pp. 313--322. @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} ## @end itemize ## ## This implementation is based on G. Bolch, S. Greiner, H. de Meer and ## K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and ## Performance Evaluation with Computer Science Applications}, Wiley, ## 1998 and Edward D. Lazowska, John Zahorjan, G. Scott Graham, and ## Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer ## System Analysis Using Queueing Network Models}, Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 7.4.2.1 ("Exact Solution Techniques"). ## ## @seealso{qnclosed, qncmmvaapprox, qncmvisits} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncmmva( varargin ) if ( nargin < 2 || nargin > 5 ) print_usage(); endif if ( nargin == 2 || ndims(varargin{3}) == 2 ) [err N S V m Z] = qncmchkparam( varargin{:} ); isempty(err) || error(err); [U R Q X] = __qncmmva_nocs( N, S, V, m, Z ); else [U R Q X] = __qncmmva_cs( varargin{:} ); endif endfunction ############################################################################## ## Analyze closed, multiclass QNs with class switching function [U R Q X] = __qncmmva_cs( N, S, P, r, m ) if ( nargin < 3 || nargin > 5 ) print_usage(); endif isvector(N) && all( N>=0 ) || ... error( "N must be >=0" ); N = N(:)'; # make N a row vector C = length(N); ## Number of classes ( ndims(S) == 2 ) || ... error( "S must be a matrix" ); K = columns(S); ## Number of service centers size(S) == [C,K] || ... error( "S size mismatch (is %dx%d, should be %dx%d)", rows(S), columns(S), C, K ); ndims(P) == 4 && size(P) == [C,K,C,K] || ... error( "P size mismatch (should be %dx%dx%dx%d)",C,K,C,K ); if ( nargin < 4 ) r = ones(1,C); # reference station else if (isscalar(r)) r = r*ones(1,C); endif ( isvector(r) && length(r) == C ) || ... error("r must be a vector with %d elements", C); r = r(:)'; all( r>=1 && r<=K ) || ... error("elements of r are out of range [1,%d]",K); endif if ( nargin < 5 ) m = ones(1,K); else isvector(m) || ... error( "m must be a vector" ); m = m(:)'; # make m a row vector length(m) == K || ... error( "m size mismatch (should be %d, is %d)", K, length(m) ); endif ## Check consistency of parameters all(S(:) >= 0) || ... error( "S must be >= 0" ); all( any(S>0,2) ) || ... error( "S must contain at least a value >0 for each row" ); all(P(:)>= 0) || ... error( "P must be >=0" ); U = R = Q = X = zeros(C,K); ## 1. Compute visit counts [V ch] = qncmvisits(P,r); ## 2. Identify chains nch = max(ch); ## 3. Compute visit counts for the equivalent network Vstar = zeros(nch,K); for q=1:nch r = (ch == q); Vstar(q,:) = sum(V(r,:),1); endfor ## 4. Compute proportionality constants alpha = zeros(C,K); for r=1:C for k=find( Vstar(ch(r),:) > 0 ) alpha(r,k) = V(r,k) / Vstar( ch(r), k ); endfor endfor ## 5. Compute service times Sstar = zeros(nch,K); for q=1:nch r = (ch==q); Sstar(q,:) = dot( alpha(r,:), S(r,:), 1 ); endfor ## 6. Compute populations of superclasses Nstar = zeros(1,nch); for q=1:nch r = (ch == q); Nstar(q) = sum( N(r) ); endfor ## 7. Solve the equivalent network [Ustar Rstar Qstar Xstar Qnm1] = __qncmmva_nocs( Nstar, Sstar, Vstar, m, zeros(size(Nstar)) ); ## 8. Compute solutions of the original network for r=1:C for k=1:K R(r,k) = S(r,k) * (1 + Qnm1(ch(r),k)*(m(k)==1)); X(r,k) = alpha(r,k) * Xstar(ch(r),k); Q(r,k) = X(r,k) * R(r,k); U(r,k) = S(r,k) * X(r,k) / max(1,m(k)); endfor endfor ## 9. Check for numerical instability if ( any(U(:)<0) || any(R(:)<0) ) warning("qn:numerical-instability", "Numerical instability detected. Type 'help qncmmva' for details"); endif endfunction ############################################################################## ## Analyze closed, multiclass QNs WITHOUT class switching ## ## This implementation is based on: ## ## Herb Schwetman, "Implementing the Mean Value Algorithm for the ## Solution of Queueing Network Models", technical report OSD-TR-355, ## dept. of Computer Science, Purdue University, feb. 1982. ## function [U R Q X Qnm1] = __qncmmva_nocs( N, S, V, m, Z ) assert( nargin == 5 ); all( any(S>0,2) ) || ... error( "S must contain at least a value >0 for each row" ); [C K] = size(S); ## ensure that the service times for multiserver nodes ## are class-independent for k=find(m>1) all( S(:,k) == S(1,k) ) || ... error( "Service times for FCFS node %d are not class-independent", k ); endfor ## Initialize results R = zeros( C, K ); X = zeros( 1, C ); D = S .* V; ## The multiclass MVA algorithm requires to store the queue lengths Q( ## _n_, k ) at center k where the population vector is _n_. The space ## required would be K*prod(N+1), but this can be reduced by ## considering that, at each iteration of the main MVA loop, the total ## number of requests is n; therefore it is sufficient to consider the ## first (C-1) components of vector _n_ to uniquely identify the cell ## containing Q( _n_, k ). See Schwetman for a better explanation. bufsize = prod((N+1)(1:end-1)); Q_next = Q = zeros( bufsize,K ); p = cell(1,K); for k=find(m>1) ## p{i}(j+1,k+1) is the probability to have j jobs at node i ## where the network is in state k p{k} = zeros( m(k)+1,bufsize ); p{k}(1,__getidx(N,0*N)) = 1; endfor Qnm1= zeros(C,K); ## Qnm1(c,k) is the number of requests in center k, provided that the population size is N-1_c (N is the total population vector). This value is needed by __qncmmva_cs. Qnm1 is only filled for M/M/1 or PS centers. The values are not computed for PS nodes dd = zeros(1,C); for c=find(N>0) h = zeros(1,C); h(c) = 1; dd(c) = __getidx(N,h)-1; endfor for n=1:sum(N) ## MVA iteration for population size n n_bar = zeros(1, C); const = min(n, N); mp = 0; while ( all(n_bar(C) <= const(C)) ) ## Fill the current configuration (algorithm 3b, p. 10, Schwetman) x=n-mp; i=1; while ( x>0 && i<=C ) n_bar(i) = min(x,const(i)); x -= n_bar(i); mp += n_bar(i); i += 1; endwhile idx = __getidx( N, n_bar ); R = S; ## Compute response time for LI servers k=find(m==1); for c=find(n_bar>0) ## idx-dd(c) is the index of element n_bar - 1_c R(c,k) = S(c,k).*(1 + Q( idx-dd(c), k ) ); Qnm1(c,k) = Q( idx-dd(c), k); ## for FCFS nodes with class-dependent service times, ## it is possible to use the following approximation ## (p. 469 Bolch et al.) ## ## R(c,k) = S(c,k) + sum( S(:,k) * Q(idx(:), k) ); ## R(c,k) = S(c,k) + sum( S(:,k) .* Q(idx, k) .* V(:,k) ) / sum(V(:,k)); endfor ## Compute response time for LD servers for k=find(m>1) j=0:m(k)-2; # range for c=find(n_bar > 0 ) R(c,k) = S(c,k)/m(k)*(1 + Q( idx-dd(c), k ) + ... dot(m(k)-j-1,p{k}(j+1,idx-dd(c)) ) ); endfor endfor X = n_bar ./ ( Z .+ dot(R,V,2)' ); # X(c) = N(c) / ( Z(c) + sum_k R(c,k) * V(c,k) ) ## Q_k = sum_c X(c) * R(c,k) * V(c,k) Q_next( idx, : ) = (X * (R .* V))'; ## Update marginal probabilities for LD servers for k=find(m>1) j = 1:m(k)-1; s = zeros(size(j)); for r=find(n_bar>0) # FIXME: vectorize this s+=(D(r,k)*X(r)*p{k}(j,idx-dd(r)))'; endfor p{k}(j+1,idx) = s./j; p{k}(1,idx) = 1-1/m(k)*(dot( D(:,k),X ) + ... dot( m(k)-j, p{k}(j+1,idx) ) ); endfor #{ ## The following "if" is in the paper, but it makes the algorithm ## incorrect. Therefore, it is commented out. if ( n_bar(C) == N(C) ) break; endif #} ## Advance to next feasible configuration (Algorithm 3c, p. 10 Schwetman) i = 1; sw = true; while sw if ( ( mp==n || n_bar(i)==const(i)) && ( i14.323 %! assert( U, [14.323 0 .358; 0 4.707 .157], 1e-3 ); %! # FIXME: I replaced 14.3->14.323 %! assert( X, [14.323 0 14.323; 0 .314 .314 ], 1e-3 ); %! # FIXME: I replaced 14.3->14.323 %! assert( Q, [14.323 0 .677; 0 4.707 .293 ], 1e-3 ); %! assert( R, [1 0 .047; 0 15 .934 ], 1e-3 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law ## Example 9.5 p. 337, Bolch et al. %!test %! S = [ 0.2 0.4 1; 0.2 0.6 2 ]; %! V = [ 1 0.6 0.4; 1 0.3 0.7 ]; %! N = [ 2 1 ]; %! m = [ 2 1 -1 ]; %! [U R Q X] = qncmmva(N,S,V,m); %! assert( Q, [ 0.428 0.726 0.845; 0.108 0.158 0.734 ], 1e-3 ); %! assert( X(1,1), 2.113, 1e-3 ); # CHECK %! assert( X(2,1), 0.524, 1e-3 ); # CHECK %! assert( all(U(:)<=1) ); %! assert( Q, R.*X, 1e-5 ); # Little's Law ## Multiclass network with two classes; however, class 2 has 0 requests. ## Therefore, we check that the results for class 1 are the same as those ## computed by the single-class MVA %!test %! C = 2; # two classes %! K = 4; # four servers %! S = V = zeros(C,K); %! S(1,:) = linspace(1,2,K); %! S(2,:) = linspace(2,3,K); %! V(1,:) = linspace(4,1,K); %! V(2,:) = linspace(6,3,K); %! N = [10 0]; # class 2 has no customers %! [U1 R1 Q1 X1] = qncmmva(N,S,V); %! [U2 R2 Q2 X2] = qncsmva(N(1),S(1,:),V(1,:)); %! assert( U1(1,:), U2, 1e-5 ); %! assert( R1(1,:), R2, 1e-5 ); %! assert( Q1(1,:), Q2, 1e-5 ); %! assert( X1(1,:), X2, 1e-5 ); ## This is example 5(b) page 7 of ## http://docs.lib.purdue.edu/cstech/259/ ## "Testing network-of-queues software", technical report CSD-TR 330, %!test %! Z = [1 15]; %! V = [1; 1]; %! S = [.025; .5]; %! N = [15; 5]; %! [U R Q X] = qncmmva(N, S, V, 1, Z); %! assert( U, [.358; .157], 1e-3 ); %! assert( Q, [.677; .293], 1e-3 ); %! assert( X, [14.323; .314], 1e-3 ); ## NOTE: X(1,1) = 14.3 in Schwetman %! assert( R, [.047; .934], 1e-3 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law ## This is example of Figure 6, page 9 of ## http://docs.lib.purdue.edu/cstech/259/ ## "Testing network-of-queues software", technical report CSD-TR 330, %!test %! C = 2; %! K = 6; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = P(2,1,2,2) = 1; %! P(1,2,1,3) = P(1,2,1,4) = P(1,2,1,5) = P(1,2,1,6) = .25; %! P(2,2,2,3) = P(2,2,2,4) = P(2,2,2,5) = P(2,2,2,6) = .25; %! P(1,3,1,1) = P(1,4,1,1) = P(1,5,1,1) = P(1,6,1,1) = .9; %! P(1,3,1,2) = P(1,4,1,2) = P(1,5,1,2) = P(1,6,1,2) = .1; %! P(2,3,2,1) = P(2,4,2,1) = P(2,5,2,1) = P(2,6,2,1) = .05; %! P(2,3,2,2) = P(2,4,2,2) = P(2,5,2,2) = P(2,6,2,2) = .95; %! N = [40 4]; %! S = [ 5.0 .010 .035 .035 .035 .035; ... %! 10.0 .100 .035 .035 .035 .035 ]; %! V = qncmvisits(P); %! [U R Q X] = qncmmva(N, S, V, [-1 1 1 1 1 1]); %! # FIXME: The results below were computed with JMVA; the numbers %! # in the paper are different (wrong?!?)!! %! assert( U, [39.457941 0.087684 0.076724 0.076724 0.076724 0.076724; ... %! 2.772704 0.554541 0.048522 0.048522 0.048522 0.048522 ], 1e-5 ); %! assert( R.*V, [5 0.024363 0.011081 0.011081 0.011081 0.011081; ... %! 10 3.636155 0.197549 0.197549 0.197549 0.197549 ], 1e-5 ); %! assert( Q(:,1), [39.457941 2.772704]', 1e-5 ); %! assert( Q(:,2), [0.192262 1.008198]', 1e-5 ); %! assert( Q(:,3), [0.087449 0.054775]', 1e-5 ); %! assert( Q(:,4), Q(:,5), 1e-5 ); %! assert( Q(:,5), Q(:,6), 1e-5 ); %! assert( X(:,1), [7.891588 0.277270]', 1e-5 ); %! assert( X(:,2), [8.768431 5.545407]', 1e-5 ); %! assert( X(:,3), [2.192108 1.386352]', 1e-5 ); %! assert( X(:,4), X(:,5), 1e-5 ); %! assert( X(:,5), X(:,6), 1e-5 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law ## If there is no class switching, we must get the same results as ## the plain application of multiclass MVA %!test %! C = 2; # two classes %! K = 4; # four servers %! C = 2; K = 4; %! P = zeros(C,K,C,K); %! S = zeros(C,K); %! %! # Routing %! %! # class 1 routing %! P(1,1,1,1) = .05; %! P(1,1,1,2) = .45; %! P(1,1,1,3) = .5; %! P(1,2,1,1) = 1; %! P(1,3,1,1) = 1; %! # class 2 routing %! P(2,1,2,1) = .01; %! P(2,1,2,3) = .5; %! P(2,1,2,4) = .49; %! P(2,3,2,1) = 1; %! P(2,4,2,1) = 1; %! %! # Compute visits %! %! V = qncmvisits(P); %! %! # Define population and service times %! %! N = [3 2]; %! S = [0.01 0.09 0.10 0.08; ... %! 0.05 0.09 0.10 0.08]; %! [U1 R1 Q1 X1] = qncmmva(N,S,V); # this invokes __qncmmva_nocs %! [U2 R2 Q2 X2] = qncmmva(N,S,P); # this invokes __qncmmva_cs %! assert( U2, U1, 1e-5 ); %! assert( R2, R1, 1e-5 ); %! assert( Q2, Q1, 1e-5 ); %! assert( X2, X1, 1e-5 ); ## Example from table 5, p. 23, Herb Schwetman, "Implementing the Mean ## Value Algorith for the Solution of Queueing Network Models", ## Technical Report CSD-TR-355, Department of Computer Sciences, Purdue ## University, feb 15, 1982. %!test %! S = [1 0 .025; 0 15 .5]; %! V = [1 0 1; 0 1 1]; %! N = [15 5]; %! m = [-1 -1 1]; %! [U R Q X] = qncmmva(N,S,V,m); %! assert( U, [14.323 0 .358; 0 4.707 .157], 1e-3 ); %! assert( R, [1.0 0 .047; 0 15 .934], 1e-3 ); %! assert( Q, [14.323 0 .677; 0 4.707 .293], 1e-3 ); %! assert( X, [14.323 0 14.323; 0 .314 .314], 1e-3 ); ## Same test as above, but using routing probabilities instead of ## visits. Also, reordered the nodes such that server 1 is the PS node ## labeled "Sys 3" in the example; server 2 is the IS labeled "APL1" and ## server e is the IS labeled "IMS2" %!test %! S = [.025 1 15; .5 1 15 ]; %! P = zeros(2,3,2,3); %! P(1,1,1,2) = P(1,2,1,1) = 1; %! P(2,1,2,3) = P(2,3,2,1) = 1; %! N = [15 5]; %! m = [1 -1 -1]; %! r = [1 1]; # reference station is station 1 %! [U R Q X] = qncmmva(N,S,P,r,m); %! # FIXME: I replaced 14.3->14.323 %! assert( U, [0.358 14.323 0; 0.156 0 4.707], 1e-3 ); %! # FIXME: I replaced 14.3->14.323 %! assert( X, [14.323 14.3230 0; .314 0 .314 ], 1e-3 ); %! # FIXME: I replaced 14.3->14.323 %! assert( Q, [.677 14.323 0; .293 0 4.707], 1e-3 ); %! assert( R, [.047 1 15.0; .934 1 15.0], 1e-3 ); %! assert( Q, R.*X, 1e-5 ); # Little's Law ## Example figure 9 Herb Schwetman "Implementing the Mean ## Value Algorith for the Solution of Queueing Network Models", ## Technical Report CSD-TR-355, Department of Computer Sciences, Purdue ## University, feb 15, 1982. %!test %! C = 2; K = 3; %! S = [.01 .07 .10; ... %! .05 .07 .10 ]; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = .7; %! P(1,1,1,3) = .2; %! P(1,1,2,1) = .1; %! P(2,1,2,2) = .3; %! P(2,1,2,3) = .5; %! P(2,1,1,1) = .2; %! P(1,2,1,1) = P(2,2,2,1) = 1; %! P(1,3,1,1) = P(2,3,2,1) = 1; %! N = [3 0]; %! [U R Q X] = qncmmva(N, S, P); %! assert( R, [.015 .133 .163; .073 .133 .163], 1e-3 ); %! assert( X, [12.609 8.826 2.522; 6.304 1.891 3.152], 1e-3 ); %! assert( Q, [.185 1.175 .412; .462 .252 .515], 1e-3 ); %! assert( U, [.126 .618 .252; .315 .132 .315], 1e-3 ); ## Example from Schwetman (figure 7, page 9 of ## http://docs.lib.purdue.edu/cstech/259/ ## "Testing network-of-queues software, technical report CSD-TR 330, ## Purdue University). Note that the results for that network (table 9 ## of the reference above) seems to be wrong. The "correct" results ## below have been computed using the multiclass MVA implementation of ## JMT (http://jmt.sourceforge.net/) %!test %! V = [ 1.00 0.45 0.50 0.00; ... %! 1.00 0.00 0.50 0.49 ]; %! N = [3 2]; %! S = [0.01 0.09 0.10 0.08; ... %! 0.05 0.09 0.10 0.08]; %! [U R Q X] = qncmmva(N, S, V); %! assert( U, [ 0.1215 0.4921 0.6075 0.0000; ... %! 0.3433 0.0000 0.3433 0.2691 ], 1e-4 ); %! assert( Q, [ 0.2131 0.7539 2.0328 0.0000; ... %! 0.5011 0.0000 1.1839 0.3149 ], 1e-4 ); %! assert( R.*V, [0.0175 0.0620 0.1672 0.0000; ... %! 0.0729 0.0000 0.1724 0.0458 ], 1e-4 ); %! assert( X, [12.1517 5.4682 6.0758 0.0000; ... %! 6.8669 0.0000 3.4334 3.3648 ], 1e-4 ); ## The following test case was used in a bug report from F. Paolieri. It ## consists of a three-class network with four nodes. There is just ## one job for each class n; that job visits node 1 and node 1+n. ## Singe service times at nodes 2:4 are all the same, and service time ## at node 1 is class-independent, we expect that all performance ## measures for nodes 2:4 are equal. %!test %! N = [1 1 1]; %! S = [0.20000 0.02000 0.00000 0.00000; %! 0.20000 0.00000 0.02000 0.00000; %! 0.20000 0.00000 0.00000 0.02000]; %! V = [1 1 0 0; %! 1 0 1 0; %! 1 0 0 1]; %! [U R Q X] = qncmmva(N,S,V); %! assert( Q(1,2), Q(2,3), 1e-5); %! assert( Q(2,3), Q(3,4), 1e-5); %! assert( abs(max(Q(:,1)) - min(Q(:,1))) < 1e-5 ); ## This example is from G. Casale and G. Serazzi. Quantitative system ## evaluation with java modeling tools. In Proceedings of the second ## joint WOSP/SIPEW international conference on Performance engineering, ## ICPE '11, pages 449-454, New York, NY, USA, 2011. ACM %!demo %! Ntot = 100; # total population size %! b = linspace(0.1,0.9,10); # fractions of class-1 requests %! S = [20 80 31 14 23 12; ... %! 90 30 33 20 14 7]; %! V = ones(size(S)); %! X1 = X1 = XX = zeros(size(b)); %! R1 = R2 = RR = zeros(size(b)); %! for i=1:length(b) %! N = [fix(b(i)*Ntot) Ntot-fix(b(i)*Ntot)]; %! # printf("[%3d %3d]\n", N(1), N(2) ); %! [U R Q X] = qncmmva( N, S, V ); %! X1(i) = X(1,1) / V(1,1); %! X2(i) = X(2,1) / V(2,1); %! XX(i) = X1(i) + X2(i); %! R1(i) = dot(R(1,:), V(1,:)); %! R2(i) = dot(R(2,:), V(2,:)); %! RR(i) = Ntot / XX(i); %! endfor %! subplot(2,1,1); %! plot(b, X1, ";Class 1;", "linewidth", 2, ... %! b, X2, ";Class 2;", "linewidth", 2, ... %! b, XX, ";System;", "linewidth", 2 ); %! legend("location","south"); legend("boxoff"); %! ylabel("Throughput"); %! subplot(2,1,2); %! plot(b, R1, ";Class 1;", "linewidth", 2, ... %! b, R2, ";Class 2;", "linewidth", 2, ... %! b, RR, ";System;", "linewidth", 2 ); %! legend("location","south"); legend("boxoff"); %! xlabel("Population mix \\beta for Class 1"); %! ylabel("Resp. Time"); %!demo %! S = [1 0 .025; 0 15 .5]; %! P = zeros(2,3,2,3); %! P(1,1,1,3) = P(1,3,1,1) = 1; %! P(2,2,2,3) = P(2,3,2,2) = 1; %! V = qncmvisits(P,[3 3]); # reference station is station 3 %! N = [15 5]; %! m = [-1 -1 1]; %! [U R Q X] = qncmmva(N,S,V,m) ## Example shown on Figure 9: Herb Schwetman, "Implementing the Mean ## Value Algorith for the Solution of Queueing Network Models", ## Technical Report CSD-TR-355, Department of Computer Sciences, Purdue ## University, feb 15, 1982. %!demo %! C = 2; K = 3; %! S = [.01 .07 .10; ... %! .05 .07 .10 ]; %! P = zeros(C,K,C,K); %! P(1,1,1,2) = .7; P(1,1,1,3) = .2; P(1,1,2,1) = .1; %! P(2,1,2,2) = .3; P(2,1,2,3) = .5; P(2,1,1,1) = .2; %! P(1,2,1,1) = P(2,2,2,1) = 1; %! P(1,3,1,1) = P(2,3,2,1) = 1; %! N = [3 0]; %! [U R Q X] = qncmmva(N, S, P) queueing/inst/qnos.m0000664000175000017500000001447513356117742014421 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnos (@var{lambda}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnos (@var{lambda}, @var{S}, @var{V}, @var{m}) ## ## @cindex open network, single class ## @cindex BCMP network ## ## Analyze open, single class BCMP queueing networks with @math{K} service centers. ## ## This function works for a subset of BCMP single-class open networks ## satisfying the following properties: ## ## @itemize ## ## @item The allowed service disciplines at network nodes are: FCFS, ## PS, LCFS-PR, IS (infinite server); ## ## @item Service times are exponentially distributed and ## load-independent; ## ## @item Center @math{k} can consist of @code{@var{m}(k) @geq{} 1} ## identical servers. ## ## @item Routing is load-independent ## ## @end itemize ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Overall external arrival rate (@code{@var{lambda}>0}). ## ## @item @var{S}(k) ## average service time at center @math{k} (@code{@var{S}(k)>0}). ## ## @item @var{V}(k) ## average number of visits to center @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{i}. If @code{@var{m}(k) < 1}, ## enter @math{k} is a delay center (IS); otherwise it is a regular ## queueing center with @code{@var{m}(k)} servers. Default is ## @code{@var{m}(k) = 1} for all @math{k}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## If @math{k} is a queueing center, ## @code{@var{U}(k)} is the utilization of center @math{k}. ## If @math{k} is an IS node, then @code{@var{U}(k)} is the ## @emph{traffic intensity} defined as @code{@var{X}(k)*@var{S}(k)}. ## ## @item @var{R}(k) ## center @math{k} average response time. ## ## @item @var{Q}(k) ## average number of requests at center @math{k}. ## ## @item @var{X}(k) ## center @math{k} throughput. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks ## and Markov Chains: Modeling and Performance Evaluation with Computer ## Science Applications}, Wiley, 1998 ## @end itemize ## ## @seealso{qnopen,qnclosed,qnosvisits} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnos( varargin ) if ( nargin < 3 || nargin > 4 ) print_usage(); endif [err lambda S V m] = qnoschkparam( varargin {:} ); isempty(err) || error(err); all(S>0) || ... error( "S must be positive" ); ## If there are M/M/k servers with k>=1, compute the maximum ## processing capacity m(m<1) = -1; # avoids division by zero in next line [Umax kmax] = max( lambda * S .* V ./ m ); (Umax < 1) || ... error( "Processing capacity exceeded at center %d", kmax ); l = lambda*V; # arrival rates i = find( m == 1 ); # single station queueing centers if numel(i) [U(i) R(i) Q(i) X(i)] = qsmm1( l(i), 1./S(i) ); endif i = find( m<1 ); # delay centers if numel(i) [U(i) R(i) Q(i) X(i)] = qsmminf( l(i), 1./S(i) ); endif i = find( m>1 ); # multiple stations queueing centers if numel(i) [U(i) R(i) Q(i) X(i)] = qsmmm( l(i), 1./S(i), m(i) ); endif endfunction %!test %! lambda = 0; %! S = [1 1 1]; %! V = [1 1 1]; %! fail( "qnos(lambda,S,V)","lambda must be"); %! lambda = 1; %! S = [1 0 1]; %! fail( "qnos(lambda,S,V)","S must be"); %! S = [1 1 1]; %! m = [1 1]; %! fail( "qnos(lambda,S,V,m)","incompatible size"); %! V = [1 1 1 1]; %! fail( "qnos(lambda,S,V)","incompatible size"); %! fail( "qnos(1.0, [0.9 1.2], [1 1])", "exceeded at center 2"); %! fail( "qnos(1.0, [0.9 2.0], [1 1], [1 2])", "exceeded at center 2"); %! qnos(1.0, [0.9 1.9], [1 1], [1 2]); # should not fail %! qnos(1.0, [0.9 1.9], [1 1], [1 0]); # should not fail %! qnos(1.0, [1.9 1.9], [1 1], [0 0]); # should not fail %! qnos(1.0, [1.9 1.9], [1 1], [2 2]); # should not fail %!test %! # Example 34.1 p. 572 Bolch et al. %! lambda = 3; %! V = [16 7 8]; %! S = [0.01 0.02 0.03]; %! [U R Q X] = qnos( lambda, S, V ); %! assert( R, [0.0192 0.0345 0.107], 1e-2 ); %! assert( U, [0.48 0.42 0.72], 1e-2 ); %! assert( Q, R.*X, 1e-5 ); # check Little's Law %!test %! # Example p. 113, Lazowska et al. %! V = [121 70 50]; %! S = [0.005 0.03 0.027]; %! lambda=0.3; %! [U R Q X] = qnos( lambda, S, V ); %! assert( U(1), 0.182, 1e-3 ); %! assert( X(1), 36.3, 1e-2 ); %! assert( Q(1), 0.222, 1e-3 ); %! assert( Q, R.*X, 1e-5 ); # check Little's Law %!test %! lambda=[1]; %! P=[0]; %! V=qnosvisits(P,lambda); %! S=[0.25]; %! [U1 R1 Q1 X1]=qnos(sum(lambda),S,V); %! [U2 R2 Q2 X2]=qsmm1(lambda(1),1/S(1)); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %! assert( X1, X2, 1e-5 ); ## Check if processing capacity is properly accounted for %!test %! lambda = 1.1; %! V = 1; %! m = [2]; %! S = [1]; %! [U1 R1 Q1 X1] = qnos(lambda,S,V,m); %! m = [-1]; %! lambda = 90.0; %! [U1 R1 Q1 X1] = qnos(lambda,S,V,m); %!demo %! lambda = 3; %! V = [16 7 8]; %! S = [0.01 0.02 0.03]; %! [U R Q X] = qnos( lambda, S, V ); %! R_s = dot(R,V) # System response time %! N = sum(Q) # Average number in system %!test %! # Example 7.4 p. 287 Bolch et al. %! S = [ 0.04 0.03 0.06 0.05 ]; %! P = [ 0 0.5 0.5 0; 1 0 0 0; 0.6 0 0 0; 1 0 0 0 ]; %! lambda = [0 0 0 4]; %! V=qnosvisits(P,lambda); %! k = [ 3 2 4 1 ]; %! [U R Q X] = qnos( sum(lambda), S, V ); %! assert( X, [20 10 10 4], 1e-4 ); %! assert( U, [0.8 0.3 0.6 0.2], 1e-2 ); %! assert( R, [0.2 0.043 0.15 0.0625], 1e-3 ); %! assert( Q, [4, 0.429 1.5 0.25], 1e-3 ); queueing/inst/ctmcchkQ.m0000664000175000017500000000465113320135615015157 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{result} @var{err}] =} ctmcchkQ (@var{Q}) ## ## @cindex Markov chain, continuous time ## ## If @var{Q} is a valid infinitesimal generator matrix, return ## the size (number of rows or columns) of @var{Q}. If @var{Q} is not ## an infinitesimal generator matrix, set @var{result} to zero, and ## @var{err} to an appropriate error string. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [result err] = ctmcchkQ( Q ) persistent epsilon = 100*eps; if ( nargin != 1 ) print_usage(); endif result = 0; err = ""; if ( !issquare(Q) ) err = "P is not a square matrix"; return; endif if (any(Q(~logical(eye(size(Q))))<0) || ... # there is any negative non-diagonal element norm( sum(Q,2), "inf" ) > epsilon ) err = "Q is not an infinitesimal generator matrix"; return; endif result = rows(Q); endfunction %!test %! Q = [0]; %! [result err] = ctmcchkQ(Q); %! assert( result, 1 ); %! assert( err, "" ); %!test %! N = 10; %! Q = ctmcbd(rand(1,N-1),rand(1,N-1)); %! [result err] = ctmcchkQ(Q); %! assert( result, N ); %! assert( err, "" ); %!test %! Q = [1 2 3; 4 5 6]; %! [result err] = ctmcchkQ(Q); %! assert( result, 0 ); %! assert( index(err, "square") > 0 ); %!test %! N = 10; %! Q = ctmcbd(rand(1,N-1),rand(1,N-1)); %! Q(2,1) = -1; %! [result err] = ctmcchkQ(Q); %! assert( result, 0 ); %! assert( index(err, "infinitesimal") > 0 ); %!test %! N = 10; %! Q = ctmcbd(linspace(1,N-1,N-1),linspace(1,N-1,N-1)); %! Q(1,1) += 7; %! [result err] = ctmcchkQ(Q); %! assert( result, 0 ); %! assert( index(err, "infinitesimal") > 0 ); queueing/inst/qnclosed.m0000664000175000017500000000733412762046576015253 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosed (@var{N}, @var{S}, @var{V}, @dots{}) ## ## @cindex closed network, single class ## @cindex closed network, multiple classes ## ## This function computes steady-state performance measures of closed ## queueing networks using the Mean Value Analysis (MVA) algorithm. The ## qneneing network is allowed to contain fixed-capacity centers, delay ## centers or general load-dependent centers. Multiple request ## classes are supported. ## ## This function dispatches the computation to one of ## @code{qncsemva}, @code{qncsmvald} or @code{qncmmva}. ## ## @itemize ## ## @item If @var{N} is a scalar, the network is assumed to have a single ## class of requests; in this case, the exact MVA algorithm is used to ## analyze the network. If @var{S} is a vector, then @code{@var{S}(k)} ## is the average service time of center @math{k}, and this function ## calls @code{qncsmva} which supports load-independent ## service centers. If @var{S} is a matrix, @code{@var{S}(k,i)} is the ## average service time at center @math{k} when @math{i=1, @dots{}, N} ## jobs are present; in this case, the network is analyzed with the ## @code{qncmmvald} function. ## ## @item If @var{N} is a vector, the network is assumed to have multiple ## classes of requests, and is analyzed using the exact multiclass ## MVA algorithm as implemented in the @code{qncmmva} function. ## ## @end itemize ## ## @seealso{qncsmva, qncsmvald, qncmmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnclosed( N, S, V, varargin ) if ( nargin < 3 ) print_usage(); endif if ( isscalar(N) ) if ( isvector(S) ) [U R Q X] = qncsmva( N, S, V, varargin{:} ); else [U R Q X] = qncsmvald( N, S, V, varargin{:} ); endif else [U R Q X] = qncmmva( N, S, V, varargin{:} ); endif endfunction %!demo %! P = [0 0.3 0.7; 1 0 0; 1 0 0]; # Transition probability matrix %! S = [1 0.6 0.2]; # Average service times %! m = ones(size(S)); # All centers are single-server %! Z = 2; # External delay %! N = 15; # Maximum population to consider %! V = qncsvisits(P); # Compute number of visits %! X_bsb_lower = X_bsb_upper = X_ab_lower = X_ab_upper = X_mva = zeros(1,N); %! for n=1:N %! [X_bsb_lower(n) X_bsb_upper(n)] = qncsbsb(n, S, V, m, Z); %! [X_ab_lower(n) X_ab_upper(n)] = qncsaba(n, S, V, m, Z); %! [U R Q X] = qnclosed( n, S, V, m, Z ); %! X_mva(n) = X(1)/V(1); %! endfor %! close all; %! plot(1:N, X_ab_lower,"g;Asymptotic Bounds;", ... %! 1:N, X_bsb_lower,"k;Balanced System Bounds;", ... %! 1:N, X_mva,"b;MVA;", "linewidth", 2, ... %! 1:N, X_bsb_upper,"k", 1:N, X_ab_upper,"g" ); %! axis([1,N,0,1]); legend("location","southeast"); legend("boxoff"); %! xlabel("Number of Requests n"); ylabel("System Throughput X(n)"); queueing/inst/qncmpopmix.m0000664000175000017500000001064613356121371015621 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {pop_mix =} qncmpopmix (@var{k}, @var{N}) ## ## @cindex population mix ## @cindex closed network, multiple classes ## ## Return the set of population mixes for a closed multiclass queueing ## network with exactly @var{k} customers. Specifically, given a ## closed multiclass QN with @math{C} customer classes, where there ## are @code{@var{N}(c)} class @math{c} requests, a @math{k}-mix ## @var{mix} is a @math{C}-dimensional vector with the following ## properties: ## ## @example ## @group ## all( mix >= 0 ); ## all( mix <= N ); ## sum( mix ) == k; ## @end group ## @end example ## ## @var{pop_mix} is a matrix with @math{C} columns, such ## that each row represents a valid mix. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{k} ## Size of the requested mix (scalar, @code{@var{k} @geq{} 0}). ## ## @item @var{N}(c) ## number of class @math{c} requests (@code{@var{k} @leq{} sum(@var{N})}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{pop_mix}(i,c) ## number of class @math{c} requests in the @math{i}-th population ## mix. The number of mixes is @code{rows(@var{pop_mix})}. ## ## @end table ## ## If you are interested in the number of @math{k}-mixes only, you can ## use the funcion @code{qnmvapop}. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Herb Schwetman, @cite{Implementing the Mean Value Algorithm for the ## Solution of Queueing Network Models}, Technical Report ## @uref{http://docs.lib.purdue.edu/cstech/286/, 80-355}, Department of Computer ## Sciences, Purdue University, revised February 15, 1982. ## @end itemize ## ## The slightly different problem of enumerating all tuples @math{k_1, ## @dots{}, k_N} such that @math{\sum_i k_i = k} and @math{k_i ## @geq{} 0}, for a given @math{k @geq{} 0} has been described in ## S. Santini, @cite{Computing the Indices for a Complex Summation}, ## unpublished report, available at ## @url{http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf} ## ## @seealso{qncmnpop} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function pop_mix = qncmpopmix( k, population ) if ( nargin != 2 ) print_usage(); endif isvector( population ) && all( population>=0 ) || ... error( "N must be an array >=0" ); R = length(population); # number of classes ( isscalar(k) && k >= 0 && k <= sum(population) ) || ... error( "k must be a scalar <= %d", sum(population)); N = zeros(1, R); const = min(k, population); mp = 0; pop_mix = []; # Init result while ( N(R) <= const(R) ) x=k-mp; ## Fill the current configuration i=1; while ( x>0 && i<=R ) N(i) = min(x,const(i)); x = x-N(i); mp = mp+N(i); i = i+1; endwhile ## here the configuration is filled. add it to the set of mixes assert( sum(N), k ); pop_mix = [pop_mix; N]; ## FIXME: pop_mix is continuously resized ## advance to the next feasible configuration i = 1; sw = true; while sw if ( ( mp==k || N(i)==const(i)) && ( i. ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{r} @var{err}] =} dtmcchkP (@var{P}) ## ## @cindex Markov chain, discrete time ## @cindex DTMC ## @cindex discrete time Markov chain ## ## Check whether @var{P} is a valid transition probability matrix. ## ## If @var{P} is valid, @var{r} is the size (number of rows or columns) ## of @var{P}. If @var{P} is not a transition probability matrix, ## @var{r} is set to zero, and @var{err} to an appropriate error string. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [result err] = dtmcchkP( P ) if ( nargin != 1 ) print_usage(); endif result = 0; err = ""; if ( !issquare(P) ) err = "P is not a square matrix"; return; endif if ( any(P(:)<-eps) || norm( sum(P,2) - 1, "inf" ) > columns(P)*eps ) err = "P is not a stochastic matrix"; return; endif result = rows(P); endfunction %!test %! [r err] = dtmcchkP( [1 1 1; 1 1 1] ); %! assert( r, 0 ); %! assert( index(err, "square") > 0 ); %!test %! [r err] = dtmcchkP( [1 0 0; 0 0.5 0; 0 0 0] ); %! assert( r, 0 ); %! assert( index(err, "stochastic") > 0 ); %!test %! P = [0 1; 1 0]; %! assert( dtmcchkP(P), 2 ); %!test %! P = dtmcbd( linspace(0.1,0.4,10), linspace(0.4,0.1,10) ); %! assert( dtmcchkP(P), rows(P) ); %!test %! N = 1000; %! P = reshape( 1:N^2, N, N ); %! P(1:N+1:end) = 0; %! P = P ./ repmat(sum(P,2),1,N); %! assert( dtmcchkP(P), N );queueing/inst/erlangc.m0000664000175000017500000000537713023226476015051 0ustar morenomoreno## Copyright (C) 2014 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{C} =} erlangc (@var{A}, @var{m}) ## ## @cindex Erlang-C formula ## ## Compute the steady-state probability @math{E_C(A, m)} that an open ## queueing system with @math{m} identical servers, infinite wating ## space, arrival rate @math{\lambda}, individual service rate ## @math{\mu} and offered load @math{A = \lambda / \mu} has all the ## servers busy. ## ## @tex ## @math{E_C(A, m)} is defined as: ## ## $$ ## E_C(A, m) = \displaystyle{ {A^m \over m!} {1 \over 1-\rho} \left( \sum_{k=0}^{m-1} {A^k \over k!} + {A^m \over m!} {1 \over 1 - \rho} \right) ^{-1}} ## $$ ## ## where @math{\rho = A / m = \lambda / (m \mu)}. ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{A} ## Offered load. @math{A = \lambda / \mu} where ## @math{\lambda} is the mean arrival rate and @math{\mu} the mean ## service rate of each individual server (real, @math{0 < A < m}). ## ## @item @var{m} ## Number of identical servers (integer, @math{m @geq{} 1}). ## Default @math{m = 1} ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{B} ## The value @math{E_C(A, m)} ## ## @end table ## ## @var{A} or @var{m} can be vectors, and in this case, the results will ## be vectors as well. ## ## @seealso{qsmmm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function C = erlangc(A, m) if ( nargin < 1 || nargin > 2 ) print_usage(); endif ( isnumeric(A) && all(A(:) > 0) ) || error("A must be positive"); if ( nargin == 1 ) m = 1; else ( isnumeric(m) && all( fix(m(:)) == m(:)) && all( m(:) > 0 ) ) || error("m must be a positive integer"); endif [err A, m] = common_size(A, m); if ( err ) error("parameters are not of common size"); endif all( A(:) < m(:) ) || error("A must be < m"); rho = A ./ m; B = erlangb(A, m); C = B ./ (1 - rho .* (1 - B)); endfunction %!test %! fail("erlangc('foo',1)", "positive"); %! fail("erlangc(1,'bar')", "positive"); queueing/inst/qncsmvald.m0000664000175000017500000001542513356123743015423 0ustar morenomoreno## Copyright (C) 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvald (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvald (@var{N}, @var{S}, @var{V}, @var{Z}) ## ## @cindex Mean Value Analysys (MVA) ## @cindex MVA ## @cindex closed network, single class ## @cindex load-dependent service center ## ## Mean Value Analysis algorithm for closed, single class queueing ## networks with @math{K} service centers and load-dependent service ## times. This function supports FCFS, LCFS-PR, PS and IS nodes. For ## networks with only fixed-rate centers and multiple-server ## nodes, the function @code{qncsmva} is more efficient. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## Population size (number of requests in the system, @code{@var{N} @geq{} 0}). ## If @code{@var{N} == 0}, this function returns @code{@var{U} = @var{R} = @var{Q} = @var{X} = 0} ## ## @item @var{S}(k,n) ## mean service time at center @math{k} ## where there are @math{n} requests, @math{1 @leq{} n ## @leq{} N}. @code{@var{S}(k,n)} @math{= 1 / \mu_{k}(n)}, ## where @math{\mu_{k}(n)} is the service rate of center @math{k} ## when there are @math{n} requests. ## ## @item @var{V}(k) ## average number of visits to service center @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{Z} ## external delay ("think time", @code{@var{Z} @geq{} 0}); default 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## utilization of service center @math{k}. The ## utilization is defined as the probability that service center ## @math{k} is not empty, that is, @math{U_k = 1-\pi_k(0)} where ## @math{\pi_k(0)} is the steady-state probability that there are 0 ## jobs at service center @math{k}. ## ## @item @var{R}(k) ## response time on service center @math{k}. ## ## @item @var{Q}(k) ## average number of requests in service center @math{k}. ## ## @item @var{X}(k) ## throughput of service center @math{k}. ## ## @end table ## ## @strong{NOTES} ## ## In presence of load-dependent servers, the MVA algorithm is known ## to be numerically unstable. Generally this problem manifests itself ## as negative response times or utilization. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed ## Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, ## April 1980, pp. 313--322. @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} ## @end itemize ## ## This implementation is described in G. Bolch, S. Greiner, H. de Meer ## and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling ## and Performance Evaluation with Computer Science Applications}, Wiley, ## 1998, Section 8.2.4.1, ``Networks with Load-Dependent Service: Closed ## Networks''. ## ## @seealso{qncsmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncsmvald( N, S, V, Z ) if ( nargin < 3 || nargin > 4 ) print_usage(); endif isvector(V) && all(V>=0) || ... error( "V must be a vector >= 0" ); V = V(:)'; # make V a row vector K = length(V); # Number of servers isscalar(N) && N >= 0 || ... error( "N must be >= 0" ); ( ismatrix(S) && rows(S) == K && columns(S) >= N ) || ... error( "S size mismatch: is %dx%d, should be %dx%d", rows(S), columns(S), K, N ); all(S(:)>=0) || ... error( "S must be >= 0" ); if ( nargin < 4 ) Z = 0; else isscalar(Z) && Z>=0 || ... error( "Z must be >= 0" ); endif ## Initialize results p = zeros( K, N+1 ); # p(k,i+1) is the probability that there are i jobs at server k, given that the network population is j p(:,1) = 1; U = R = Q = X = zeros( 1, K ); X_s = 0; # System throughput ## Main MVA loop, iterates over the population size for n=1:N # over population size j=1:n; ## for i=1:K ## R(i) = sum( j.*S(i,j).*p(i,j) ); ## endfor R = sum( repmat(j,K,1).*S(:,1:n).*p(:,1:n), 2)'; R_s = dot( V, R ); # System response time X_s = n / (Z+R_s); # System Throughput ## G_N = G_Nm1 / X_s; G_Nm1 = G_N; ## prepare for next iteration for i=1:K p(i, 1+j) = X_s * S(i,j) .* p(i,j) * V(i); p(i, 1) = 1-sum(p(i,1+j)); endfor endfor Q = X_s * ( V .* R ); U = 1-p(:,1)'; # Service centers utilization X = X_s * V; # Service centers throughput endfunction ## Check degenerate case of N==0 (general LD case) %!test %! N = 0; %! S = [1 2; 3 4; 5 6; 7 8]; %! V = [1 1 1 4]; %! [U R Q X] = qncsmvald(N, S, V); %! assert( U, 0*V ); %! assert( R, 0*V ); %! assert( Q, 0*V ); %! assert( X, 0*V ); %!test %! # Exsample 3.42 p. 577 Jain %! V = [ 16 10 5 ]; %! N = 20; %! S = [ 0.125 0.3 0.2 ]; %! Sld = repmat( S', 1, N ); %! Z = 4; %! [U1 R1 Q1 X1] = qncsmvald(N,Sld,V,Z); %! [U2 R2 Q2 X2] = qncsmva(N,S,V,ones(1,3),Z); %! assert( U1, U2, 1e-3 ); %! assert( R1, R2, 1e-3 ); %! assert( Q1, Q2, 1e-3 ); %! assert( X1, X2, 1e-3 ); %!test %! # Example 8.7 p. 349 Bolch et al. %! N = 3; %! Sld = 1 ./ [ 2 4 4; ... %! 1.667 1.667 1.667; ... %! 1.25 1.25 1.25; ... %! 1 2 3 ]; %! V = [ 1 .5 .5 1 ]; %! [U R Q X] = qncsmvald(N,Sld,V); %! assert( Q, [0.624 0.473 0.686 1.217], 1e-3 ); %! assert( R, [0.512 0.776 1.127 1], 1e-3 ); %! assert( all( U<=1) ); %!test %! # Example 8.4 p. 333 Bolch et al. %! N = 3; %! S = [ .5 .6 .8 1 ]; %! m = [2 1 1 N]; %! Sld = zeros(3,N); %! Sld(1,:) = .5 ./ [1 2 2]; %! Sld(2,:) = [.6 .6 .6]; %! Sld(3,:) = [.8 .8 .8]; %! Sld(4,:) = 1 ./ [1 2 3]; %! V = [ 1 .5 .5 1 ]; %! [U1 R1 Q1 X1] = qncsmvald(N,Sld,V); %! [U2 R2 Q2 X2] = qncsmva(N,S,V,m); %! ## Note that qncsmvald computes the utilization in a different %! ## way as qncsmva; in fact, qncsmva knows that service %! ## center i has m(i)>1 servers, but qncsmvald does not. Thus, %! ## utilizations for multiple-server nodes cannot be compared %! assert( U1([2,3]), U2([2,3]), 1e-3 ); %! assert( R1, R2, 1e-3 ); %! assert( Q1, Q2, 1e-3 ); %! assert( X1, X2, 1e-3 ); queueing/inst/qnopenab.m0000664000175000017500000000253112762046576015240 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnopenab (@var{lambda}, @dots{} ) ## ## This function is deprecated. Please use @code{qnosaba} instead. ## ## @seealso{qnosaba} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xu Rl] = qnopenab( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnopenab is deprecated. Please use qnosaba instead"); endif [Xl Xu Rl Ru] = qnosaba( varargin{:} ); endfunction queueing/inst/dtmc_fpt.m0000664000175000017500000000512712762046576015241 0ustar morenomoreno## Copyright (C) 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} dtmc_fpt (@var{P}) ## ## This function is deprecated. Please use @code{dtmcfpt} instead. ## ## @seealso{ctmcfpt} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function result = dtmc_fpt( P ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_fpt is deprecated. Please use dtmcfpt instead"); endif result = dtmcfpt( P ); endfunction %!test %! P = [1 1 1; 1 1 1]; %! fail( "dtmc_fpt(P)" ); %!test %! P = dtmc_bd([1 1 1], [0 0 0] ); %! fail( "dtmc_fpt(P)", "absorbing" ); %!test %! P = [ 0.0 0.9 0.1; ... %! 0.1 0.0 0.9; ... %! 0.9 0.1 0.0 ]; %! p = dtmc(P); %! M = dtmc_fpt(P); %! assert( diag(M)', 1./p, 1e-8 ); ## Example on p. 461 of [GrSn97] %!test %! P = [ 0 1 0 0 0; ... %! .25 .0 .75 0 0; ... %! 0 .5 0 .5 0; ... %! 0 0 .75 0 .25; ... %! 0 0 0 1 0 ]; %! M = dtmc_fpt(P); %! assert( M, [16 1 2.6667 6.3333 21.3333; ... %! 15 4 1.6667 5.3333 20.3333; ... %! 18.6667 3.6667 2.6667 3.6667 18.6667; ... %! 20.3333 5.3333 1.6667 4 15; ... %! 21.3333 6.3333 2.6667 1 16 ], 1e-4 ); %!test %! sz = 10; %! P = reshape( 1:sz^2, sz, sz ); %! normP = repmat(sum(P,2),1,columns(P)); %! P = P./normP; %! M = dtmc_fpt(P); %! for i=1:rows(P) %! for j=1:columns(P) %! assert( M(i,j), 1 + dot(P(i,:), M(:,j)) - P(i,j)*M(j,j), 1e-8); %! endfor %! endfor ## "Rat maze" problem (p. 453 of [GrSn97]); %!test %! P = zeros(9,9); %! P(1,[2 4]) = .5; %! P(2,[1 5 3]) = 1/3; %! P(3,[2 6]) = .5; %! P(4,[1 5 7]) = 1/3; %! P(5,[2 4 6 8]) = 1/4; %! P(6,[3 5 9]) = 1/3; %! P(7,[4 8]) = .5; %! P(8,[7 5 9]) = 1/3; %! P(9,[6 8]) = .5; %! M = dtmc_fpt(P); %! assert( M(1:9 != 5,5)', [6 5 6 5 5 6 5 6], 100*eps ); queueing/inst/qnmvapop.m0000664000175000017500000000241212762046576015274 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{H} =} qnmvapop (@var{N}) ## ## This function is deprecated. Please use @code{qncmnpop} instead. ## ## @seealso{qncmnpop} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function H = qnmvapop( N ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmvapop is deprecated. Please use qncmnpop instead"); endif H = qncmnpop( N ); endfunction queueing/inst/qsmm1k.m0000664000175000017500000001007513123252506014630 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pK}] =} qsmm1k (@var{lambda}, @var{mu}, @var{K}) ## ## @cindex @math{M/M/1/K} system ## ## Compute utilization, response time, average number of requests and ## throughput for a @math{M/M/1/K} finite capacity system. In a ## @math{M/M/1/K} queue there is a single server; the maximum number of ## requests in the system (including the request being served) ## is @math{K}, and the maximum queue length is @math{K-1}. ## ## @tex ## The steady-state probability @math{\pi_k} that there are @math{k} ## jobs in the system, @math{0 @leq{} k @leq{} K}, is: ## ## $$ ## \pi_k = {(1-a)a^k \over 1-a^{K+1}} ## $$ ## ## where @math{a = \lambda/\mu}. ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate (@code{@var{lambda}>0}). ## ## @item @var{mu} ## Service rate (@code{@var{mu}>0}). ## ## @item @var{K} ## Maximum number of requests allowed in the system (@code{@var{K} @geq{} 1}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Service center utilization, which is defined as @code{@var{U} = 1-@var{p0}} ## ## @item @var{R} ## Service center response time ## ## @item @var{Q} ## Average number of requests in the system ## ## @item @var{X} ## Service center throughput ## ## @item @var{p0} ## Steady-state probability that there are no requests in the system ## ## @item @var{pK} ## Steady-state probability that there are @math{K} requests in the system ## (i.e., that the system is full) ## ## @end table ## ## @var{lambda}, @var{mu} and @var{K} can be vectors of the ## same size. In this case, the results will be vectors as well. ## ## @seealso{qsmm1,qsmminf,qsmmm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pK] = qsmm1k( lambda, mu, K ) if ( nargin != 3 ) print_usage(); endif ( isvector(lambda) && isvector(mu) && isvector(K) ) || ... error( "lambda, mu, K must be vectors of the same size" ); [err lambda mu K] = common_size( lambda, mu, K ); if ( err ) error( "Parameters are not of common size" ); endif all( K>0 ) || ... error( "K must be >0" ); ( all( lambda>0 ) && all( mu>0 ) ) || ... error( "lambda and mu must be >0" ); U = R = Q = X = p0 = pK = 0*lambda; a = lambda./mu; ## persistent tol = 1e-7; ## if a!=1 ## i = find( abs(a-1)>tol ); i = find( a != 1 ); p0(i) = (1-a(i))./(1-a(i).^(K(i)+1)); pK(i) = (1-a(i)).*(a(i).^K(i))./(1-a(i).^(K(i)+1)); Q(i) = a(i)./(1-a(i)) - (K(i)+1)./(1-a(i).^(K(i)+1)).*(a(i).^(K(i)+1)); ## if a==1 ## i = find( abs(a-1)<=tol ); i = find( a == 1 ); p0(i) = pK(i) = 1./(K(i)+1); Q(i) = K(i)/2; ## Compute other performance measures U = 1-p0; X = lambda.*(1-pK); R = Q ./ X; endfunction %!test %! lambda = mu = 1; %! K = 10; %! [U R Q X p0] = qsmm1k(lambda,mu,K); %! assert( Q, K/2, 1e-7 ); %! assert( U, 1-p0, 1e-7 ); %!test %! # Compare result with one obtained by solvind the CTMC %! lambda = 0.8; %! mu = 0.8; %! K = 10; %! [U1 R1 Q1 X1] = qsmm1k( lambda, mu, K ); %! birth = lambda*ones(1,K); %! death = mu*ones(1,K); %! q = ctmc(ctmc_bd( birth, death )); %! U2 = 1-q(1); %! Q2 = dot( [0:K], q ); %! assert( U1, U2, 1e-4 ); %! assert( Q1, Q2, 1e-4 ); queueing/inst/ctmc_mtta.m0000664000175000017500000000372512762046576015416 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{t} =} ctmc_mtta (@var{Q}, @var{p}) ## ## This function is deprecated. Please use @code{ctmcmtta} instead. ## ## @seealso{ctmcmtta} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function t = ctmc_mtta( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "ctmc_mtta is deprecated. Please use ctmcmtta instead"); endif t = ctmcmtta( varargin{:} ); endfunction %!test %! Q = [0 1 0; 1 0 1; 0 1 0 ]; Q -= diag( sum(Q,2) ); %! fail( "ctmc_mtta(Q,[1 0 0])", "no absorbing"); %!test %! Q = [0 1 0; 1 0 1; 0 0 0; 0 0 0 ]; %! fail( "ctmc_mtta(Q,[1 0 0])", "square matrix"); %!test %! Q = [0 1 0; 1 0 1; 0 0 0 ]; %! fail( "ctmc_mtta(Q,[1 0 0])", "infinitesimal"); %!test %! Q = [ 0 0.1 0 0; ... %! 0.9 0 0.1 0; ... %! 0 0.9 0 0.1; ... %! 0 0 0 0 ]; %! Q -= diag( sum(Q,2) ); %! assert( ctmc_mtta( Q,[0 0 0 1] ), 0 ); # state 4 is absorbing %!test %! Q = [-1 1; 0 0]; %! assert( ctmc_mtta( Q, [0 1] ), 0 ); # state 2 is absorbing %! assert( ctmc_mtta( Q, [1 0] ), 1 ); # the result has been computed by hand queueing/inst/qncsconvld.m0000664000175000017500000001747713356122222015605 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsconvld (@var{N}, @var{S}, @var{V}) ## ## @cindex closed network ## @cindex normalization constant ## @cindex convolution algorithm ## @cindex load-dependent service center ## ## Convolution algorithm for product-form, single-class closed ## queueing networks with @math{K} general load-dependent service ## centers. ## ## This function computes steady-state performance measures for ## single-class, closed networks with load-dependent service centers ## using the convolution algorithm; the normalization constants are also ## computed. The normalization constants are returned as vector ## @code{@var{G}=[@var{G}(1), @dots{}, @var{G}(N+1)]} where ## @code{@var{G}(i+1)} is the value of @math{G(i)}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## Number of requests in the system (@code{@var{N}>0}). ## ## @item @var{S}(k,n) ## mean service time at center @math{k} where there are @math{n} ## requests, @math{1 @leq{} n @leq{} N}. @code{@var{S}(k,n)} @math{= 1 / \mu_{k,n}}, where @math{\mu_{k,n}} is the service rate of center ## @math{k} when there are @math{n} requests. ## ## @item @var{V}(k) ## visit count of service center @math{k} ## (@code{@var{V}(k) @geq{} 0}). The length of @var{V} is the number of ## servers @math{K} in the network. ## ## @end table ## ## @strong{OUTPUT} ## ## @table @code ## ## @item @var{U}(k) ## center @math{k} utilization. ## ## @item @var{R}(k) ## average response time at center @math{k}. ## ## @item @var{Q}(k) ## average number of requests in center @math{k}. ## ## @item @var{X}(k) ## center @math{k} throughput. ## ## @item @var{G}(n) ## Normalization constants (vector). @code{@var{G}(n+1)} ## corresponds to @math{G(n)}, as array indexes in Octave start ## from 1. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Herb Schwetman, @cite{Some Computational Aspects of Queueing Network ## Models}, Technical Report ## @uref{http://docs.lib.purdue.edu/cstech/285/, CSD-TR-354}, Department ## of Computer Sciences, Purdue University, February 1981 (revised). ## ## @item ## M. Reiser, H. Kobayashi, @cite{On The Convolution Algorithm for ## Separable Queueing Networks}, In Proceedings of the 1976 ACM ## SIGMETRICS Conference on Computer Performance Modeling Measurement and ## Evaluation (Cambridge, Massachusetts, United States, March 29--31, ## 1976). SIGMETRICS '76. ACM, New York, NY, ## pp. 109--117. @uref{http://doi.acm.org/10.1145/800200.806187, 10.1145/800200.806187} ## @end itemize ## ## This implementation is based on G. Bolch, S. Greiner, H. de Meer and ## K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and ## Performance Evaluation with Computer Science Applications}, Wiley, ## 1998, pp. 313--317. Function @command{qncsconvld} is slightly ## different from the version described in Bolch et al. because it ## supports general load-dependent centers (while the version in the book ## does not). The modification is in the definition of function ## @code{F()} in @command{qncsconvld} which has been made similar to ## function @math{f_i} defined in Schwetman, @cite{Some Computational ## Aspects of Queueing Network Models}. ## ## @seealso{qncsconv} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X G] = qncsconvld( N, S, V ) if ( nargin != 3 ) print_usage(); endif ( isscalar(N) && N>0 ) || ... error( "N must be a positive scalar" ); K = N; # To be compliant with the reference, we denote K as the population size ( isvector(V) && all(V>=0) ) || ... error( "V must be a vector >=0" ); V = V(:)'; # Make V a row vector N = length(V); # Number of service centers if ( isnumeric(S) ) ( rows(S) == N && columns(S) == K) || ... error( sprintf("S size mismatch: is %dx%d, should be %dx%d", rows(S), columns(S),K,N ) ); all(S(:)>=0) || ... error( "S must be >=0" ); endif ## Initialization G_n = G_nm1 = zeros(1,K+1); G_n(1) = 1; F_n = zeros(N,K+1); F_n(:,1) = 1; for k=1:K G_n(k+1) = F_n(1,k+1) = F(1,k,V,S); endfor ## Main convolution loop for n=2:N G_nm1 = G_n; for k=2:K+1 F_n(n,k) = F(n,k-1,V,S); endfor G_n = conv( F_n(n,:), G_nm1(:) )(1:K+1); endfor ## Done computation of G(n,k). G = G_n; G = G(:)'; # ensure G is a row vector ## Computes performance measures X = V*G(K)/G(K+1); Q = U = zeros(1,N); for i=1:N G_N_i = zeros(1,K+1); G_N_i(1) = 1; for k=1:K j=1:k; G_N_i(k+1) = G(k+1)-dot( F_n(i,j+1), G_N_i(k-j+1) ); endfor k=0:K; p_i(k+1) = F_n(i,k+1)./G(K+1).*G_N_i(K-k+1); Q(i) = dot( k, p_i( k+1 ) ); U(i) = 1-p_i(1); endfor R = Q ./ X; endfunction %!test %! K=3; %! S = [ 1 1 1; 1 1 1 ]; %! V = [ 1 .667 .2 ]; %! fail( "qncsconvld(K,S,V)", "size mismatch" ); %!test %! # Example 8.1 p. 318 Bolch et al. %! K=3; %! S = [ 1/0.8 ./ [1 2 2]; %! 1/0.6 ./ [1 2 3]; %! 1/0.4 ./ [1 1 1] ]; %! V = [ 1 .667 .2 ]; %! [U R Q X G] = qncsconvld( K, S, V ); %! assert( G, [1 2.861 4.218 4.465], 5e-3 ); %! assert( X, [0.945 0.630 0.189], 1e-3 ); %! assert( Q, [1.290 1.050 0.660], 1e-3 ); %! assert( R, [1.366 1.667 3.496], 1e-3 ); %!test %! # Example 8.3 p. 331 Bolch et al. %! # compare results of convolution with those of mva %! K = 6; %! S = [ 0.02 0.2 0.4 0.6 ]; %! V = [ 1 0.4 0.2 0.1 ]; %! [U_mva R_mva Q_mva X_mva] = qncsmva(K, S, V); %! [U_con R_con Q_con X_con G] = qncsconvld(K, repmat(S',1,K), V ); %! assert( U_mva, U_con, 1e-5 ); %! assert( R_mva, R_con, 1e-5 ); %! assert( Q_mva, Q_con, 1e-5 ); %! assert( X_mva, X_con, 1e-5 ); %!test %! # Compare the results of convolution to those of mva %! S = [ 0.02 0.2 0.4 0.6 ]; %! K = 6; %! V = [ 1 0.4 0.2 0.1 ]; %! m = [ 1 5 2 1 ]; %! [U_mva R_mva Q_mva X_mva] = qncsmva(K, S, V); %! [U_con R_con Q_con X_con G] = qncsconvld(K, repmat(S',1,K), V); %! assert( U_mva, U_con, 1e-5 ); %! assert( R_mva, R_con, 1e-5 ); %! assert( Q_mva, Q_con, 1e-5 ); %! assert( X_mva, X_con, 1e-5 ); %!function r = S_function(k,n) %! M = [ 1/0.8 ./ [1 2 2]; %! 1/0.6 ./ [1 2 3]; %! 1/0.4 ./ [1 1 1] ]; %! r = M(k,n); %!test %! # Example 8.1 p. 318 Bolch et al. %! K=3; %! V = [ 1 .667 .2 ]; %! [U R Q X G] = qncsconvld( K, @S_function, V ); %! assert( G, [1 2.861 4.218 4.465], 5e-3 ); %! assert( X, [0.945 0.630 0.189], 1e-3 ); %! assert( Q, [1.290 1.050 0.660], 1e-3 ); %! assert( R, [1.366 1.667 3.496], 1e-3 ); ## result = F(i,j,v,S) ## ## Helper fuction to compute a generalization of equation F(i,j) as ## defined in Eq 7.61 p. 289 of Bolch, Greiner, de Meer, Trivedi ## "Queueing Networks and Markov Chains: Modeling and Performance ## Evaluation with Computer Science Applications", Wiley, 1998. This ## generalization is taken from Schwetman, "Some Computational Aspects ## of Queueing Network Models", Technical Report CSD-TR 354, Dept. of ## CS, Purdue University, Dec 1980 (see definition of f_i(n) on p. 7). function result = F(i,j,v,S) k_i = j; if ( k_i == 0 ) result = 1; else result = v(i)^k_i * prod(S(i,1:k_i)); endif endfunction queueing/inst/qnopensingle.m0000664000175000017500000000273312762046576016143 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnopensingle (@var{lambda}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnopensingle (@var{lambda}, @var{S}, @var{V}, @var{m}) ## ## This function is deprecated. Please use @code{qnos} instead. ## ## @seealso{qnos} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnopensingle( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnopensingle is deprecated. Please use qnos instead"); endif [U R Q X] = qnos( varargin{:} ); endfunction queueing/inst/dtmc.m0000664000175000017500000001244013356103312014342 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{p} =} dtmc (@var{P}) ## @deftypefnx {Function File} {@var{p} =} dtmc (@var{P}, @var{n}, @var{p0}) ## ## @cindex Markov chain, discrete time ## @cindex discrete time Markov chain ## @cindex DTMC ## @cindex Markov chain, stationary probabilities ## @cindex Markov chain, transient probabilities ## ## Compute stationary or transient state occupancy probabilities for a discrete-time Markov chain. ## ## With a single argument, compute the stationary state occupancy ## probabilities @code{@var{p}(1), @dots{}, @var{p}(N)} for a ## discrete-time Markov chain with finite state space @math{@{1, @dots{}, ## N@}} and with @math{N \times N} transition matrix ## @var{P}. With three arguments, compute the transient state occupancy ## probabilities @code{@var{p}(1), @dots{}, @var{p}(N)} that the system is in ## state @math{i} after @var{n} steps, given initial occupancy ## probabilities @var{p0}(1), @dots{}, @var{p0}(N). ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## transition probabilities from state @math{i} to state @math{j}. ## @var{P} must be an @math{N \times N} irreducible stochastic matrix, ## meaning that the sum of each row must be 1 (@math{\sum_{j=1}^N ## P_{i, j} = 1}), and the rank of @var{P} must be @math{N}. ## ## @item @var{n} ## Number of transitions after which state occupancy probabilities are computed ## (scalar, @math{n @geq{} 0}) ## ## @item @var{p0}(i) ## probability that at step 0 the system is in state @math{i} (vector ## of length @math{N}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{p}(i) ## If this function is called with a single argument, @code{@var{p}(i)} ## is the steady-state probability that the system is in state @math{i}. ## If this function is called with three arguments, @code{@var{p}(i)} ## is the probability that the system is in state @math{i} ## after @var{n} transitions, given the probabilities ## @code{@var{p0}(i)} that the initial state is @math{i}. ## ## @end table ## ## @seealso{ctmc} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function p = dtmc( P, n, p0 ) if ( nargin != 1 && nargin != 3 ) print_usage(); endif [N err] = dtmcchkP(P); ( N>0 ) || ... error( err ); if ( nargin == 1 ) # steady-state analysis A = P-eye(N); A(:,N) = 1; # add normalization condition rank( A ) == N || ... warning( "dtmc(): P is reducible" ); b = [ zeros(1,N-1) 1 ]; p = b/A; else # transient analysis ( isscalar(n) && n>=0 ) || ... error( "n must be >=0" ); ( isvector(p0) && length(p0) == N && all(p0>=0) && abs(sum(p0)-1.0). ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimvaapprox (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimvaapprox (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimvaapprox (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimvaapprox (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimvaapprox (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}, @var{iter_max}) ## ## This function is deprecated. Please use @code{qncmmvaap} instead. ## ## @seealso{qncmmvaap} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnclosedmultimvaapprox( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qqnclosedmultimvaapprox is deprecated. Please use qncmmvaap instead"); endif [U R Q X] = qncmmvaap( varargin{:} ); endfunction %!test %! S = [ 1 3 3; 2 4 3]; %! V = [ 1 1 3; 1 1 3]; %! N = [ 1 1 ]; %! m = [1 ; 1 ]; %! Z = [2 2 2]; %! fail( "qnclosedmultimvaapprox(N,S,V,m,Z)", "m must be" ); %! m = [1 ; 1 ; 1]; %! fail( "qnclosedmultimvaapprox(N,S,V,m,Z)", "Z must be" ); %!test %! S = [ 1 3; 2 4]; %! V = [ 1 1; 1 1]; %! N = [ 1 1 ]; %! m = ones(1,2); %! [U R Q X] = qnclosedmultimvaapprox(N,S,V,m); %! assert( Q, [ .192 .808; .248 .752 ], 1e-3 ); %! Xc = ( X(:,1)./V(:,1) )'; %! assert( Xc, [ .154 .104 ], 1e-3 ); %! # Compute the (overall) class-c system response time %! R_c = N ./ Xc; %! assert( R_c, [ 6.508 9.614 ], 5e-3 ); queueing/inst/qnmmmk.m0000664000175000017500000000634712762046576014746 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pK}] =} qnmmmk (@var{lambda}, @var{mu}, @var{m}, @var{K}) ## ## This function is deprecated. Please use @code{qsmmmk} instead. ## ## @seealso{qsmmmk} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pK] = qnmmmk( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmmmk is deprecated. Please use qsmmmk instead"); endif [U R Q X p0 pK] = qsmmmk( varargin{:} ); endfunction %!test %! lambda = mu = m = 1; %! k = 10; %! [U R Q X p0] = qnmmmk(lambda,mu,m,k); %! assert( Q, k/2, 1e-7 ); %! assert( U, 1-p0, 1e-7 ); %!test %! lambda = [1 0.8 2 9.2 0.01]; %! mu = lambda + 0.17; %! k = 12; %! [U1 R1 Q1 X1] = qnmm1k(lambda,mu,k); %! [U2 R2 Q2 X2] = qnmmmk(lambda,mu,1,k); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); %! assert( X1, X2, 1e-5 ); %! #assert( [U1 R1 Q1 X1], [U2 R2 Q2 X2], 1e-5 ); %!test %! lambda = 0.9; %! mu = 0.75; %! k = 10; %! [U1 R1 Q1 X1 p01] = qnmmmk(lambda,mu,1,k); %! [U2 R2 Q2 X2 p02] = qnmm1k(lambda,mu,k); %! assert( [U1 R1 Q1 X1 p01], [U2 R2 Q2 X2 p02], 1e-5 ); %!test %! lambda = 0.8; %! mu = 0.85; %! m = 3; %! k = 5; %! [U1 R1 Q1 X1 p0] = qnmmmk( lambda, mu, m, k ); %! birth = lambda*ones(1,k); %! death = [ mu*linspace(1,m,m) mu*m*ones(1,k-m) ]; %! q = ctmc(ctmc_bd( birth, death )); %! U2 = dot( q, min( 0:k, m )/m ); %! assert( U1, U2, 1e-4 ); %! Q2 = dot( [0:k], q ); %! assert( Q1, Q2, 1e-4 ); %! assert( p0, q(1), 1e-4 ); %!test %! # This test comes from an example I found on the web %! lambda = 40; %! mu = 30; %! m = 3; %! k = 7; %! [U R Q X p0] = qnmmmk( lambda, mu, m, k ); %! assert( p0, 0.255037, 1e-6 ); %! assert( R, 0.036517, 1e-6 ); %!test %! # This test comes from an example I found on the web %! lambda = 50; %! mu = 10; %! m = 4; %! k = 6; %! [U R Q X p0 pk] = qnmmmk( lambda, mu, m, k ); %! assert( pk, 0.293543, 1e-6 ); %!test %! # This test comes from an example I found on the web %! lambda = 3; %! mu = 2; %! m = 2; %! k = 5; %! [U R Q X p0 pk] = qnmmmk( lambda, mu, m, k ); %! assert( p0, 0.179334, 1e-6 ); %! assert( pk, 0.085113, 1e-6 ); %! assert( Q, 2.00595, 1e-5 ); %! assert( R-1/mu, 0.230857, 1e-6 ); # waiting time in the queue queueing/inst/dtmcisir.m0000664000175000017500000000453313356125433015245 0ustar morenomoreno## Copyright (C) 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{r} @var{s}] =} dtmcisir (@var{P}) ## ## @cindex Markov chain, discrete time ## @cindex discrete time Markov chain ## @cindex DTMC ## @cindex irreducible Markov chain ## ## Check if @var{P} is irreducible, and identify Strongly Connected ## Components (SCC) in the transition graph of the DTMC with transition ## matrix @var{P}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## transition probability from state @math{i} to state @math{j}. ## @var{P} must be an @math{N \times N} stochastic matrix. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{r} ## 1 if @var{P} is irreducible, 0 otherwise. ## ## @item @var{s}(i) ## strongly connected component (SCC) that state @math{i} belongs to. ## SCCs are numbered @math{1, 2, @dots{}}. If the graph is strongly ## connected, then there is a single SCC and the predicate @code{all(s == 1)} ## evaluates to true. ## ## @end table ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [r s] = dtmcisir( P ) if ( nargin != 1 ) print_usage(); endif [N err] = dtmcchkP(P); if ( N == 0 ) error(err); endif s = scc(P); r = (max(s) == 1); endfunction %!test %! P = [0 .5 0; 0 0 0]; %! fail( "dtmcisir(P)" ); %!test %! P = [0 1 0; 0 .5 .5; 0 1 0]; %! [r s] = dtmcisir(P); %! assert( r == 0 ); %! assert( max(s), 2 ); %! assert( min(s), 1 ); %!test %! P = [.5 .5 0; .2 .3 .5; 0 .2 .8]; %! [r s] = dtmcisir(P); %! assert( r == 1 ); %! assert( max(s), 1 ); %! assert( min(s), 1 ); queueing/inst/ctmcisir.m0000664000175000017500000000467413320140556015244 0ustar morenomoreno## Copyright (C) 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{r} @var{s}] =} ctmcisir (@var{P}) ## ## @cindex Markov chain, continuous time ## @cindex continuous time Markov chain ## @cindex CTMC ## @cindex irreducible Markov chain ## ## Check if @var{Q} is irreducible, and identify Strongly Connected ## Components (SCC) in the transition graph of the DTMC with infinitesimal ## generator matrix @var{Q}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{Q}(i,j) ## Infinitesimal generator matrix. @var{Q} is a @math{N \times N} square ## matrix where @code{@var{Q}(i,j)} is the transition rate from state ## @math{i} to state @math{j}, for @math{1 @leq{} i \neq j @leq{} N}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{r} ## 1 if @var{Q} is irreducible, 0 otherwise. ## ## @item @var{s}(i) ## strongly connected component (SCC) that state @math{i} belongs to. ## SCCs are numbered @math{1, 2, @dots{}}. If the graph is strongly ## connected, then there is a single SCC and the predicate @code{all(s == 1)} ## evaluates to true. ## ## @end table ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [r s] = ctmcisir( Q ) if ( nargin != 1 ) print_usage(); endif [N err] = ctmcchkQ(Q); ( N > 0 ) || ... error(err); s = scc(Q); r = (max(s) == 1); endfunction %!test %! Q = [-.5 .5 0; 1 0 0]; %! fail( "ctmcisir(Q)" ); %!test %! Q = [-1 1 0; .5 -.5 0; 0 0 0]; %! [r s] = ctmcisir(Q); %! assert( r == 0 ); %! assert( max(s), 2 ); %! assert( min(s), 1 ); %!test %! Q = [-.5 .5 0; .2 -.7 .5; .2 0 -.2]; %! [r s] = ctmcisir(Q); %! assert( r == 1 ); %! assert( max(s), 1 ); %! assert( min(s), 1 ); queueing/inst/qnclosedbsb.m0000664000175000017500000000320512762046576015733 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnclosedbsb (@var{N}, @dots{} ) ## ## This function is deprecated. Please use @code{qncsbsb} instead. ## ## @seealso{qncsbsb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qnclosedbsb( N, D, Z ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnclosedbsb is deprecated. Please use qncsbsb instead"); endif if ( nargin < 3 ) [Xl Xu Rl Ru] = qncsbsb(N, D); else [Xl Xu Rl Ru] = qncsbsb(N, D, ones(size(D)), ones(size(D)), Z); endif endfunction %!test %! fail("qnclosedbsb(-1,0)", "N must be"); %! fail("qnclosedbsb(1,[])", "nonempty"); %! fail("qnclosedbsb(1,[-1 2])", "nonnegative"); %! fail("qnclosedbsb(1,[1 2 3],-1)", "nonnegative"); queueing/inst/qnconvolution.m0000664000175000017500000000277212762046576016362 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qnconvolution (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qnconvolution (@var{N}, @var{S}, @var{V}, @var{m}) ## ## This function is deprecated. Please use @code{qncsconv} instead. ## ## @seealso{qncsconv} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X G] = qnconvolution( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnconvolution is deprecated. Please use qncsconv instead"); endif [U R Q X G] = qncsconv( varargin{:} ); endfunction queueing/inst/qncsvisits.m0000664000175000017500000000706312762303050015627 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{V} =} qncsvisits (@var{P}) ## @deftypefnx {Function File} {@var{V} =} qncsvisits (@var{P}, @var{r}) ## ## Compute the mean number of visits to the service centers of a ## single class, closed network with @math{K} service centers. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## probability that a request which completed service at center ## @math{i} is routed to center @math{j} (@math{K \times K} matrix). ## For closed networks it must hold that @code{sum(@var{P},2)==1}. The ## routing graph must be strongly connected, meaning that each node ## must be reachable from every other node. ## ## @item @var{r} ## Index of the reference station, @math{r \in @{1, @dots{}, K@}}; ## Default @code{@var{r}=1}. The traffic equations are solved by ## imposing the condition @code{@var{V}(r) = 1}. A request returning to ## the reference station completes its activity cycle. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{V}(k) ## average number of visits to service center @math{k}, assuming ## @math{r} as the reference station. ## ## @end table ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function V = qncsvisits( P, r ) if ( nargin < 1 || nargin > 2 ) print_usage(); endif issquare(P) || ... error("P must be a square matrix"); [res err] = dtmcchkP(P); (res>0) || ... error( "invalid transition probability matrix P" ); K = rows(P); if ( nargin < 2 ) r = 1; else isscalar(r) || ... error("r must be a scalar"); (r>=1 && r<=K) || ... error("r must be an integer in the range 1 - %d",K); endif V = zeros(size(P)); A = P-eye(K); b = zeros(1,K); A(:,r) = 0; A(r,r) = 1; b(r) = 1; V = b/A; ## Make sure that no negative values appear (sometimes, numerical ## errors produce tiny negative values instead of zeros) V = max(0,V); endfunction %!test %! P = [-1 0; 0 0]; %! fail( "qncsvisits(P)", "invalid" ); %! P = [1 0; 0.5 0]; %! fail( "qncsvisits(P)", "invalid" ); %! P = [1 2 3; 1 2 3]; %! fail( "qncsvisits(P)", "square" ); %! P = [0 1; 1 0]; %! fail( "qncsvisits(P,0)", "range" ); %! fail( "qncsvisits(P,3)", "range" ); %!test %! %! ## Closed, single class network %! %! P = [0 0.3 0.7; 1 0 0; 1 0 0]; %! V = qncsvisits(P); %! assert( V*P,V,1e-5 ); %! assert( V, [1 0.3 0.7], 1e-5 ); %!test %! %! ## Test tolerance of the qncsvisits() function. %! ## This test builds transition probability matrices and tries %! ## to compute the visit counts on them. %! %! for k=[5, 10, 20, 50] %! P = reshape(1:k^2, k, k); %! P = P ./ repmat(sum(P,2),1,k); %! V = qncsvisits(P); %! assert( V*P, V, 1e-5 ); %! endfor %!demo %! P = [0 0.3 0.7; ... %! 1 0 0 ; ... %! 1 0 0 ]; %! V = qncsvisits(P) queueing/inst/qnmmm.m0000664000175000017500000000274612762046576014572 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pm}] =} qnmmm (@var{lambda}, @var{mu}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pm}] =} qnmmm (@var{lambda}, @var{mu}, @var{m}) ## ## This function is deprecated. Please use @code{qsmmm} instead. ## ## @seealso{qsmmm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pm] = qnmmm( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmmm is deprecated. Please use qsmmm instead"); endif [U R Q X p0 pm] = qsmmm( varargin{:} ); endfunction queueing/inst/dtmc_check_P.m0000664000175000017500000000353412762046576016004 0ustar morenomoreno## Copyright (C) 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{r} @var{err}] =} dtmc_check_P (@var{P}) ## ## This function is deprecated. Please use @code{dtmcchkP} instead. ## ## @seealso{dtmcchkP} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [result err] = dtmc_check_P( P ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_check_P is deprecated. Please use dtmcchkP instead"); endif [result err] = dtmcchkP( P ); endfunction %!test %! [r err] = dtmc_check_P( [1 1 1; 1 1 1] ); %! assert( r, 0 ); %! assert( index(err, "square") > 0 ); %!test %! [r err] = dtmc_check_P( [1 0 0; 0 0.5 0; 0 0 0] ); %! assert( r, 0 ); %! assert( index(err, "stochastic") > 0 ); %!test %! P = [0 1; 1 0]; %! assert( dtmc_check_P(P), 2 ); %!test %! P = dtmc_bd( linspace(0.1,0.4,10), linspace(0.4,0.1,10) ); %! assert( dtmc_check_P(P), rows(P) ); %!test %! N = 1000; %! P = reshape( 1:N^2, N, N ); %! P(1:N+1:end) = 0; %! P = P ./ repmat(sum(P,2),1,N); %! assert( dtmc_check_P(P), N );queueing/inst/qnosbsb.m0000664000175000017500000000575012762301410015067 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosbsb (@var{lambda}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosbsb (@var{lambda}, @var{S}, @var{V}) ## ## @cindex bounds, balanced system ## @cindex open network ## ## Compute Balanced System Bounds for single-class, open networks with ## @math{K} service centers. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## overall arrival rate to the system (scalar, @code{@var{lambda} @geq{} 0}). ## ## @item @var{D}(k) ## service demand at center @math{k} (@code{@var{D}(k) @geq{} 0}). ## ## @item @var{S}(k) ## service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## mean number of visits at center @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. This function only supports ## @math{M/M/1} queues, therefore @var{m} must be ## @code{ones(size(S))}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl} ## @item @var{Xu} ## Lower and upper bounds on the system throughput. @var{Xl} is always ## set to @math{0}, since there can be no lower bound on open ## networks throughput. ## ## @item @var{Rl} ## @itemx @var{Ru} ## Lower and upper bounds on the system response time. ## ## @end table ## ## @seealso{qnosaba} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper R_lower R_upper] = qnosbsb( varargin ) if ( nargin < 2 || nargin > 4 ) print_usage(); endif [err lambda S V m] = qnoschkparam( varargin{:} ); isempty(err) || error(err); all(m==1) || ... error("this function supports M/M/1 servers only"); D = S .* V; D_max = max(D); D_tot = sum(D); D_ave = mean(D_tot); X_upper = 1/D_max; X_lower = 0; R_lower = D_tot / (1-lambda*D_ave); R_upper = D_tot / (1-lambda*D_max); endfunction %!test %! fail( "qnosbsb( 0.1, [] )", "vector" ); %! fail( "qnosbsb( 0.1, [0 -1])", "nonnegative" ); %! fail( "qnosbsb( 0, [1 2] )", "lambda" ); %! fail( "qnosbsb( -1, [1 2])", "lambda" ); %!test %! [Xl Xu Rl Ru] = qnosbsb(0.1,[1 2 3]); %! assert( Xl, 0 ); queueing/inst/qnopenmulti.m0000664000175000017500000000272512762046576016015 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnopenmulti (@var{lambda}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnopenmulti (@var{lambda}, @var{S}, @var{V}, @var{m}) ## ## This function is deprecated. Please use @code{qnom} instead. ## ## @seealso{qnom} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnopenmulti( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnopenmulti is deprecated. Please use qnom instead"); endif [U R Q X] = qnom( varargin{:} ); endfunction queueing/inst/qncsaba.m0000664000175000017500000001020612762301156015027 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## ## @cindex bounds, asymptotic ## @cindex asymptotic bounds ## @cindex closed network, single class ## ## Compute Asymptotic Bounds for the system throughput and response ## time of closed, single-class networks with @math{K} service ## centers. ## ## Single-server and infinite-server nodes are supported. ## Multiple-server nodes and general load-dependent servers are not ## supported. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## number of requests in the system (scalar, @code{@var{N}>0}). ## ## @item @var{D}(k) ## service demand at center @math{k} ## (@code{@var{D}(k) @geq{} 0}). ## ## @item @var{S}(k) ## mean service time at center @math{k} ## (@code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## average number of visits to center ## @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k} ## (if @var{m} is a scalar, all centers have that number of servers). If ## @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); ## if @code{@var{m}(k) = 1}, center @math{k} is a M/M/1-FCFS server. ## This function does not support multiple-server nodes. Default ## is 1. ## ## @item @var{Z} ## External delay (scalar, @code{@var{Z} @geq{} 0}). Default is 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl} ## @itemx @var{Xu} ## Lower and upper bounds on the system throughput. ## ## @item @var{Rl} ## @itemx @var{Ru} ## Lower and upper bounds on the system response time. ## ## @end table ## ## @seealso{qncmaba} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qncsaba( varargin ) #N, S, V, m, Z ) if (nargin<2 || nargin>5) print_usage(); endif [err N S V m Z] = qncschkparam( varargin{:} ); isempty(err) || error(err); all(m<=1) || ... error( "multiple server nodes are not supported" ); D = S.*V; Dtot_single = sum(D(m==1)); # total demand at single-server nodes Dtot_delay = sum(D(m<1)); # total demand at IS nodes Dtot = sum(D); # total demand Dmax = max(D); # max demand Xl = N/(N*Dtot_single + Dtot_delay + Z); Xu = min( N/(Dtot+Z), 1/Dmax ); Rl = max( Dtot, N*Dmax - Z ); Ru = N*Dtot_single + Dtot_delay; endfunction %!test %! fail("qncsaba(-1,0)", "N must be"); %! fail("qncsaba(1,[])", "nonempty"); %! fail("qncsaba(1,[-1 2])", "nonnegative"); %! fail("qncsaba(1,[1 2],[1 2 3])", "incompatible size"); %! fail("qncsaba(1,[1 2 3],[1 2 -1])", "nonnegative"); %! fail("qncsaba(1,[1 2 3],[1 2 3],[1 2])", "incompatible size"); %! fail("qncsaba(1,[1 2 3],[1 2 3],[1 2 1])", "not supported"); %! fail("qncsaba(1,[1 2 3],[1 2 3],[1 1 1],-1)", "nonnegative"); %! fail("qncsaba(1,[1 2 3],[1 2 3],1,[0 0])", "scalar"); ## Example 9.6 p. 913 Bolch et al. %!test %! N = 20; %! S = [ 4.6*2 8 ]; %! Z = 120; %! [X_l X_u R_l R_u] = qncsaba(N, S, ones(size(S)), ones(size(S)), Z); %! assert( [X_u R_l], [0.109 64], 1e-3 ); queueing/inst/qncsbsb.m0000664000175000017500000000777613356123110015064 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## ## @cindex bounds, balanced system ## @cindex closed network, single class ## @cindex balanced system bounds ## ## Compute Balanced System Bounds on system throughput and response time for closed, single-class networks with @math{K} service centers. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## number of requests in the system (scalar, @code{@var{N} @geq{} 0}). ## ## @item @var{D}(k) ## service demand at center @math{k} (@code{@var{D}(k) @geq{} 0}). ## ## @item @var{S}(k) ## mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## average number of visits to center @math{k} (@code{@var{V}(k) ## @geq{} 0}). Default is 1. ## ## @item @var{m}(k) ## number of servers at center @math{k}. This function supports ## @code{@var{m}(k) = 1} only (single-eserver FCFS nodes); this ## parameter is only for compatibility with @code{qncsaba}. Default is ## 1. ## ## @item @var{Z} ## External delay (@code{@var{Z} @geq{} 0}). Default is 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl} ## @itemx @var{Xu} ## Lower and upper bound on the system throughput. ## ## @item @var{Rl} ## @itemx @var{Ru} ## Lower and upper bound on the system response time. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth ## C. Sevcik, @cite{Quantitative System Performance: Computer System ## Analysis Using Queueing Network Models}, Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 5.4 ("Balanced Systems Bounds"). ## @end itemize ## ## @seealso{qncmbsb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qncsbsb( varargin ) if (nargin<2 || nargin>5) print_usage(); endif [err N S V m Z] = qncschkparam( varargin{:} ); isempty(err) || error(err); all(m==1) || ... error( "this function supports M/M/1 servers only" ); D = S .* V; D_max = max(D); D_tot = sum(D); D_ave = mean(D); Xl = N/(D_tot+Z+( (N-1)*D_max )/( 1+Z/(N*D_tot) ) ); Xu = min( 1/D_max, N/( D_tot+Z+( (N-1)*D_ave )/(1+Z/D_tot) ) ); Rl = max( N*D_max-Z, D_tot+( (N-1)*D_ave )/( 1+Z/D_tot) ); Ru = D_tot + ( (N-1)*D_max )/( 1+Z/(N*D_tot) ); endfunction %!test %! fail("qncsbsb(-1,0)", "N must be"); %! fail("qncsbsb(1,[])", "nonempty"); %! fail("qncsbsb(1,[-1 2])", "nonnegative"); %! fail("qncsbsb(1,[1 2],[1 2 3])", "incompatible size"); %! fail("qncsbsb(1,[1 2 3],[1 2 3],[1 2])", "incompatible size"); %! fail("qncsbsb(1,[1 2 3],[1 2 3],[1 2 1])", "M/M/1 servers"); %! fail("qncsbsb(1,[1 2 3],[1 2 3],[1 1 1],-1)", "nonnegative"); %! fail("qncsbsb(1,[1 2 3],[1 2 3],[1 1 1],[0 0])", "scalar"); queueing/inst/qnclosedsinglemvald.m0000664000175000017500000000300012762046576017463 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvald (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvald (@var{N}, @var{S}, @var{V}, @var{Z}) ## ## This function is deprecated. Please use @code{qncsmvald} instead. ## ## @seealso{qncsmvald} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnclosedsinglemvald( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnclosedsinglemvald is deprecated. Please use qncsmvald instead"); endif [U R Q X] = qncsmvald( varargin{:} ); endfunction queueing/inst/qnmm1k.m0000664000175000017500000000350212762046576014640 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pK}] =} qnmm1k (@var{lambda}, @var{mu}, @var{K}) ## ## This function is deprecated. Use @code{qsmm1k} instead. ## ## @seealso{qsmm1k} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pK] = qnmm1k( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmm1k is deprecated. Please use qsmm1k instead"); endif [U R Q X p0 pK] = qsmm1k( varargin{:} ); endfunction %!test %! lambda = mu = 1; %! K = 10; %! [U R Q X p0] = qnmm1k(lambda,mu,K); %! assert( Q, K/2, 1e-7 ); %! assert( U, 1-p0, 1e-7 ); %!test %! # Compare result with one obtained by solvind the CTMC %! lambda = 0.8; %! mu = 0.8; %! K = 10; %! [U1 R1 Q1 X1] = qnmm1k( lambda, mu, K ); %! birth = lambda*ones(1,K); %! death = mu*ones(1,K); %! q = ctmc(ctmc_bd( birth, death )); %! U2 = 1-q(1); %! Q2 = dot( [0:K], q ); %! assert( U1, U2, 1e-4 ); %! assert( Q1, Q2, 1e-4 ); queueing/inst/erlangb.m0000664000175000017500000000711313356113315015032 0ustar morenomoreno## Copyright (C) 2014, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{B} =} erlangb (@var{A}, @var{m}) ## ## @cindex Erlang-B formula ## ## Compute the value of the Erlang-B formula @math{E_B(A, m)} giving the ## probability that an open system with @math{m} identical servers, ## arrival rate @math{\lambda}, individual service rate @math{\mu} ## and offered load @math{A = \lambda / \mu} has all servers busy. ## ## @tex ## @math{E_B(A, m)} is defined as: ## ## $$ ## E_B(A, m) = \displaystyle{{A^m \over m!} \left( \sum_{k=0}^m {A^k \over k!} \right) ^{-1}} ## $$ ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{A} ## Offered load, defined as @math{A = \lambda / \mu} where ## @math{\lambda} is the mean arrival rate and @math{\mu} the mean ## service rate of each individual server (real, @math{A > 0}). ## ## @item @var{m} ## Number of identical servers (integer, @math{m @geq{} 1}). Default @math{m = 1} ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{B} ## The value @math{E_B(A, m)} ## ## @end table ## ## @var{A} or @var{m} can be vectors, and in this case, the results will ## be vectors as well. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Zeng, @cite{Two common properties of the erlang-B function, erlang-C function, and Engset blocking function}, Mathematical and Computer Modelling, Volume 37, Issues 12-13, June 2003, Pages 1287-1296 ## @end itemize ## ## @seealso{qsmmm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function B = erlangb(A, m) if ( nargin < 1 || nargin > 2 ) print_usage(); endif ( isnumeric(A) && all( A(:) > 0 ) ) || error("A must be positive"); if ( nargin == 1 ) m = 1; else ( isnumeric(m) && all( fix(m(:)) == m(:)) && all( m(:) > 0 ) ) || error("m must be a positive integer"); endif [err A m] = common_size(A, m); if ( err ) error("parameters are not of common size"); endif B = arrayfun( @__erlangb_compute, A, m); endfunction ## Compute E_B(A,m) recursively, as described in: ## ## Guoping Zeng, Two common properties of the erlang-B function, ## erlang-C function, and Engset blocking function, Mathematical and ## Computer Modelling Volume 37, Issues 12–13, June 2003, Pages ## 1287–1296 http://dx.doi.org/10.1016/S0895-7177(03)90040-9 ## ## To improve numerical stability, the recursion is based on the inverse ## 1 / E_B rather than E_B itself. function B = __erlangb_compute(A, m) Binv = 1.0; for k=1:m Binv = 1.0 + k/A*Binv; endfor B = 1.0 / Binv; endfunction %!test %! fail("erlangb(1, -1)", "positive"); %! fail("erlangb(-1, 1)", "positive"); %! fail("erlangb(1, 0)", "positive"); %! fail("erlangb(0, 1)", "positive"); %! fail("erlangb('foo',1)", "positive"); %! fail("erlangb(1,'bar')", "positive"); %! fail("erlangb([1 1],[1 1 1])","common size"); queueing/inst/qnsolve.m0000664000175000017500000005532112762343726015126 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"closed"}, @var{N}, @var{QQ}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"closed"}, @var{N}, @var{QQ}, @var{V}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"open"}, @var{lambda}, @var{QQ}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"mixed"}, @var{lambda}, @var{N}, @var{QQ}, @var{V}) ## ## High-level function for analyzing QN models. ## ## @itemize ## ## @item For @strong{closed} networks, the following server types are ## supported: @math{M/M/m}--FCFS, @math{-/G/\infty}, @math{-/G/1}--LCFS-PR, ## @math{-/G/1}--PS and load-dependent variants. ## ## @item For @strong{open} networks, the following server types are supported: ## @math{M/M/m}--FCFS, @math{-/G/\infty} and @math{-/G/1}--PS. General ## load-dependent nodes are @emph{not} supported. Multiclass open networks ## do not support multiple server @math{M/M/m} nodes, but only ## single server @math{M/M/1}--FCFS. ## ## @item For @strong{mixed} networks, the following server types are supported: ## @math{M/M/1}--FCFS, @math{-/G/\infty} and @math{-/G/1}--PS. General ## load-dependent nodes are @emph{not} supported. ## ## @end itemize ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## @itemx @var{N}(c) ## Number of requests in the system for closed networks. For ## single-class networks, @var{N} must be a scalar. For multiclass ## networks, @code{@var{N}(c)} is the population size of closed class ## @math{c}. ## ## @item @var{lambda} ## @itemx @var{lambda}(c) ## External arrival rate (scalar) for open networks. For single-class ## networks, @var{lambda} must be a scalar. For multiclass networks, ## @code{@var{lambda}(c)} is the class @math{c} overall arrival rate. ## ## @item @var{QQ}@{i@} ## List of queues in the network. This must be a cell array ## with @math{N} elements, such that @code{@var{QQ}@{i@}} is ## a struct produced by the @code{qnmknode} function. ## ## @item @var{Z} ## External delay ("think time") for closed networks. Default 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(k) ## If @math{k} is a FCFS node, then @code{@var{U}(k)} is the utilization ## of service center @math{k}. If @math{k} is an IS node, then ## @code{@var{U}(k)} is the @emph{traffic intensity} defined as ## @code{@var{X}(k)*@var{S}(k)}. ## ## @item @var{R}(k) ## average response time of service center @math{k}. ## ## @item @var{Q}(k) ## average number of customers in service center @math{k}. ## ## @item @var{X}(k) ## throughput of service center @math{k}. ## ## @end table ## ## Note that for multiclass networks, the computed results are per-class ## utilization, response time, number of customers and throughput: ## @code{@var{U}(c,k)}, @code{@var{R}(c,k)}, @code{@var{Q}(c,k)}, ## @code{@var{X}(c,k)}. ## ## String literals are case-insensitive, so @var{"closed"}, @var{"Closed"} ## and @var{"CLoSEd"} are all equivalent. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnsolve( network_type, varargin ) if ( nargin < 2 ) print_usage(); endif ischar(network_type) || ... error("First parameter must be a string"); network_type = tolower(network_type); if ( strcmp(network_type, "open" ) ) [U R Q X] = __qnsolve_open( varargin{:} ); elseif ( strcmp(network_type, "closed" ) ) [U R Q X] = __qnsolve_closed( varargin{:} ); elseif (strcmp(network_type, "mixed" ) ) [U R Q X] = __qnsolve_mixed( varargin{:} ); else error( "Invalid network type %s: must be one of \"open\", \"closed\" or \"mixed\"", network_type ); endif endfunction ############################################################################## ## Dispatcher function for open networks function [U R Q X] = __qnsolve_open( lambda, varargin ) if ( isscalar(lambda) ) [U R Q X] = __qnsolve_open_single( lambda, varargin{:} ); else [U R Q X] = __qnsolve_open_multi( lambda, varargin{:} ); endif endfunction ############################################################################## ## Worker function for open, single class networks function [U R Q X] = __qnsolve_open_single( lambda, QQ, V ) if ( nargin != 3 ) print_usage(); endif ( isscalar(lambda) && (lambda>0) ) || ... error( "lambda must be a scalar > 0" ); iscell(QQ) || ... error( "QQ must be a cell array" ); N = length(QQ); ( isvector(V) && length(V) == N ) || ... error( "V must be a vector of length %d", N ); V = V(:); # make V a row vector all(V>=0) || ... error( "V must be >= 0" ); ## Initialize vectors S = zeros(size(V)); m = ones(size(V)); for i=1:N QQ{i}.c == 1 || ... error( "Multiclass networks are not supported by this function" ); S(i) = QQ{i}.S; if __is_li(QQ{i}) ; # nothing to do elseif __is_multi(QQ{i}) m(i) = QQ{i}.m; elseif __is_is(QQ{i}) m(i) = -1; else error( "Unsupported type \"%s\" for node %d", QQ{i}.node, i ); endif endfor [U R Q X] = qnos( lambda, S, V, m ); __prettyprint( 0, lambda, QQ, V, U, R, Q, X ); endfunction ############################################################################## ## Worker function for open, multiclass networks function [U R Q X] = __qnsolve_open_multi( lambda, QQ, V ) if ( nargin != 3 ) print_usage(); endif isvector(lambda) && all(lambda > 0) || ... error( "lambda must be a vector >0" ); lambda = lambda(:)'; # make lambda a row vector iscell(QQ) || ... error( "QQ must be a cell array" ); C = length(lambda); K = length(QQ); [C,K] == size(V) || ... error( "V size mismatch" ); all( all( V>= 0 ) ) || ... error( "V must be >= 0 " ); S = zeros(C,K); m = ones(1,K); for i=1:K QQ{i}.c == C || ... error( "Wrong number of classes for center %d (is %d, should be %d)", i, QQ{i}.c, C ); S(:,i) = QQ{i}.S(:); if __is_li(QQ{i}) ; # nothing to do elseif __is_is(QQ{i}) m(i) = -1; else error( "Unsupported type \"%s\" for node %d", QQ{i}.node, i ); endif endfor [U R Q X] = qnom( lambda, S, V, m ); __prettyprint( 0, lambda, QQ, V, U, R, Q, X ); endfunction ############################################################################## ## Dispatcher function for closed networks function [U R Q X] = __qnsolve_closed( N, varargin ) if ( isscalar(N) ) [U R Q X] = __qnsolve_closed_single( N, varargin{:} ); else [U R Q X] = __qnsolve_closed_multi( N, varargin{:} ); endif endfunction ############################################################################## ## Worker function for closed, single-class networks function [U R Q X] = __qnsolve_closed_single( N, QQ, V, Z ) if ( nargin < 3 || nargin > 4 ) error(); endif isscalar(N) || ... error( "Multiclass networks are not supported by this function" ); iscell(QQ) || ... error( "QQ must be a cell array" ); if ( nargin < 4 ) Z = 0; else isscalar(Z) && Z >= 0 || ... error( "Z must be >= 0" ); endif K = length(QQ); ( isvector(V) && length(V) == K ) || ... error( "V must be a vector of length %d", K ); found_ld = false; for k=1:K if ( __is_ld(QQ{k}) ) found_ld = true; break; endif endfor if ( found_ld ) S = zeros(K, N); for k=1:K ( QQ{k}.c == 1 ) || ... error( "Multiclass networks are not supported by this function" ); if __is_li(QQ{k}) S(k,:) = QQ{k}.S; elseif __is_multi(QQ{k}) S(k,:) = QQ{k}.S ./ min(1:N,QQ{k}.m); elseif __is_is(QQ{k}) S(k,:) = QQ{k}.S ./ (1:N); elseif __is_ld(QQ{k}) S(k,:) = QQ{k}.S; else error( "Unsupported type \"%s\" for node %d", QQ{k}.node, k ); endif endfor [U R Q X] = qncsmvald(N, S, V, Z); else S = zeros(1,K); m = ones(1,K); for k=1:K ( QQ{k}.c == 1 ) || ... error( "Multiclass networks are not supported by this function" ); S(k) = QQ{k}.S; if __is_li(QQ{k}) # nothing to do elseif __is_multi(QQ{k}) m(k) = QQ{k}.m; elseif __is_is(QQ{k}) m(k) = -1; else error( "Unsupported type \"%s\" for node %d", QQ{k}.node, k ); endif endfor [U R Q X] = qncsmva(N, S, V, m, Z); endif __prettyprint( N, 0, QQ, V, U, R, Q, X ); endfunction ############################################################################## ## Worker function for closed, multi-class networks function [U R Q X] = __qnsolve_closed_multi( N, QQ, V, Z ) if ( nargin < 3 || nargin > 4 ) print_usage(); endif isvector(N) && all( N>0 ) || ... error( "N must be >0" ); iscell(QQ) || ... error( "QQ must be a cell array" ); C = length(N); ## Number of classes K = length(QQ); ## Number of service centers size(V) == [C,K] || ... error( "V size mismatch" ); if ( nargin < 4 ) Z = zeros(1,C); else isvector(Z) && length(Z) == C || ... error( "Z size mismatch" ); endif ## Check consistence of parameters all( all( V >= 0 ) ) || ... error( "V must be >=0" ); ## Initialize vectors i_single = i_multi = i_delay = i_ld = []; S = zeros(C,K); for i=1:K ( QQ{i}.c == C ) || ... error( "Service center %d has wrong number of classes (is %d, should be %d)", i, QQ{i}.c, C ); if __is_li(QQ{i}) i_single = [i_single i]; ( !strcmpi( QQ{i}.node, "m/m/m-fcfs" ) || all( QQ{i}.S(1) == QQ{i}.S )) || ... error( "Service times at FIFO node %d are not class-independent", i ); elseif __is_multi(QQ{i}) i_multi = [i_multi i]; elseif __is_is(QQ{i}) i_delay = [i_delay i]; elseif __is_ld(QQ{i}) columns( QQ{i}.S ) == sum(N) || ... error( "Load-dependent center %d has insufficient data (is %d, should be %d", i, columns(QQ{i}.S), sum(N) ); i_ld = [i_ld i]; else error( "Unknown or unsupported type \"%s\" for node %d", QQ{i}.node, i ); endif endfor ## Initialize results U = R = zeros( C, K ); X = zeros( 1, C ); Q_next = Q = sparse( prod(N+1),K ); p = cell(1,K); for k=i_multi ## p{i}(j+1,k+1) is the probability to have j jobs at node i ## where the network is in state k p{k} = zeros( QQ{k}.m+1,prod(N+1) ); p{k}(1,__get_idx( N, 0*N )) = 1; endfor for k=i_ld ## p{i}(j+1,k+1) is the probability to have j jobs at node i ## where the network is in state k p{k} = zeros( columns(QQ{k}.S )+1, prod(N+1) ); p{k}(1,__get_idx( N, 0*N )) = 1; endfor ## Main loop for n=1:sum(N) feasible_set = qncmpopmix( n, N ); for nn=1:rows(feasible_set) n_bar = feasible_set(nn,:); for c=1:C if ( n_bar(c) > 0 ) ## single server nodes for k=i_single n_bar_c = __minusonec(n_bar,c); idx = __get_idx( N, n_bar_c ); R(c,k) = QQ{k}.S(c)*(1 + Q( idx, k ) ); ## for FCFS nodes with class-dependent service times, ## it is possible to use the following approximation ## (p. 469 Bolch et al.) ## ## R(c,k) = S(c,k) + sum( S(:,k) * Q(idx(:), k) ); endfor ## multi server nodes for k=i_multi n_bar_c = __minusonec(n_bar,c); idx = __get_idx( N, n_bar_c ); j=0:QQ{k}.m-2; # range R(c,k) = QQ{k}.S(c)/QQ{k}.m*(1 + Q( idx, k ) + ... dot(QQ{k}.m-j-1,p{k}(j+1,idx) ) ); endfor ## General load-dependent nodes for k=i_ld n_bar_c = __minusonec(n_bar,c); idx = __get_idx( N, n_bar_c ); j=1:sum(n_bar); # range R(c,k) = sum( j .* QQ{k}.S(c,j) .* p{k}(j,idx)' ); endfor endif ## delay centers for k=i_delay R(c,k) = QQ{k}.S(c); endfor endfor # c X = n_bar ./ ( Z .+ dot(R,V,2)' ); # X(c) = N(c) / ( Z(c) + sum_k R(c,k) * V(c,k) ) idx = __get_idx( N, n_bar ); ## Q_k = sum_c X(c) * R(c,k) for k=1:K Q_next( idx, k ) = dot( X, R(:,k) .* V(:,k) ); endfor ## Adjust probabilities for multiple server nodes for k=i_multi s=0; # it is actually a vector j=1:QQ{k}.m-1; for r=find(n_bar>0) # I don't know how to vectorize this ii = __minusonec(n_bar,r); s+=QQ{k}.S(r)*V(r,k)*X(r)*p{k}(j,__get_idx(N,ii)); endfor p{k}(j+1,idx) = s./j; p{k}(1,idx) = 1-1/QQ{k}.m*(sum( QQ{k}.S(:) .* V(:,k) .* X(:) ) + ... dot( QQ{k}.m-j, p{k}(j+1,idx) ) ); endfor ## Adjust probabilities for general load-dependent server nodes for k=i_ld s=0; # it is actually a vector j=1:sum(n_bar); for r=find(n_bar>0) ii = __minusonec(n_bar,r); s+=QQ{k}.S(r,sum(n_bar))*V(r,k)*X(r)*p{k}(j,__get_idx(N,ii)); endfor p{k}(j+1,idx) = s; p{k}(1,idx) = 1-sum(p{k}(1+j,idx)); endfor endfor Q = Q_next; Q_next = sparse( prod(N+1), K ); endfor for k=1:K if __is_ld(QQ{k}) U(:,k) = 1-p{k}(1, __get_idx(N,N)); else U(:,k) = X(:) .* QQ{k}.S(:) .* V(:,k); # U(c,k) = X(c)*D(c,k) endif endfor Q = (diag(X)*R).*V; # dmult(X,R).*V; X = diag(X)*V; # dmult(X,V); endfunction ############################################################################## ## Compute the linear index corresponding to vector i from a population ## of N. function idx = __get_idx( N, i ) i_cell = num2cell( i+1 ); idx = sub2ind( N+1, i_cell{:} ); endfunction ############################################################################## ## Given an input vector n, returns an output vector r which is equal to ## n except that the element at the c-th position is decreased by one: ## r(c) = n(c)-1. Warning: no check is made on the parameters function r = __minusonec( n, c ) r = n; r(c) -= 1; endfunction ############################################################################## ## Worker function for mixed networks. This function delegates to qnmix function [U R Q X] = __qnsolve_mixed( lambda, N, QQ, V ) if ( nargin != 4 ) print_usage(); endif ( isvector(lambda) && isvector(N) && size_equal(lambda,N) ) || ... error( "lambda and N must be vectors of the same size" ); ( iscell(QQ) && length(QQ) == length(lambda) ) || ... error( "QQ size mismatch (is %d, should be %d)", length(QQ), length(lambda) ); C = length(lambda); # number of classes K = length(QQ); # number of service centers S = zeros(C,K); m = ones(1,K); ## fill S matrix for k=1:K if __is_ld(QQ{k}) error( "General load-dependent service center %d is not supported", k ); elseif __is_is(QQ{k}) m(k) = -1; else m(k) = QQ{k}.m; endif S(:,k) = QQ{k}.S; endfor [U R Q X] = qnmix( lambda, N, S, V, m ); __prettyprint( N, lambda, QQ, V, U, R, Q, X ); endfunction ############################################################################## ## return true iff Q is an infinite server (IS) node function result = __is_is( Q ) result = strcmp(Q.node, "-/g/inf" ); endfunction ############################################################################## ## return true iff Q is a multi-server FIFO node function result = __is_multi( Q ) result = (strcmp(Q.node, "m/m/m-fcfs") && Q.m>1); endfunction ############################################################################## ## return true iff Q is a single-server, load-dependent node function result = __is_ld( Q ) result = ( (strcmp(Q.node, "m/m/m-fcfs") || ... strcmp(Q.node, "-/g/1-lcfs-pr") || ... strcmp(Q.node, "-/g/1-ps" ) ) && ... columns( Q.S ) > 1 ); endfunction ############################################################################## ## return ture iff Q is a single-server, load-independent node function result = __is_li( Q ) result = ((Q.m==1) && (1 == columns( Q.S )) && !strcmp( Q.node, "-/g/inf" ) ); endfunction ############################################################################## ## This function is used to "pretty-print" a solved network. Used for ## debugging function __prettyprint( N, lambda, QQ, V, U, R, Q, X ) return; ## immediately return [errorcode, N, lambda] = common_size( N, lambda ); if ( errorcode) error( "N and lambda are of incompatible size" ); endif ( isvector(N) && isvector(lambda) && size_equal(lambda,N) ) || ... error( "N and lambda must be vector of the same length" ); C = length(N); K = length(QQ); # number of service centers [C,K] == size(V) || ... error( "V size mismatch" ); [C,K] == size(U) || ... error( "U size mismatch" ); [C,K] == size(R) || ... error( "R size mismatch" ); [C,K] == size(Q) || ... error( "Q size mismatch" ); [C,K] == size(X) || ... error( "X size mismatch" ); for c=1:C printf("\n"); printf("=== CLASS %d ===\n", c ); if ( N(c)>0 ) printf("Type: CLOSED\nPopulation: %d\n", N(c)) else printf("Type: OPEN\nRequests arrival rate: %6.2f\n", lambda(c)) endif printf("\n"); printf("+---+---------------+---+------+------+------+------+------+------+\n"); printf("| i | Node type | m | S(i) | V(i) | U(i) | R(i) | Q(i) | X(i) |\n"); printf("+---+---------------+---+------+------+------+------+------+------+\n"); for i=1:K if ( isscalar(QQ{i}.S(c)) ) serv = sprintf("%6.2f",QQ{i}.S(c)); else serv = "LD"; endif printf("|%3d|%-33s| | | | |\n", i, QQ{i}.comment); printf("| |%15s|%3d|%6s|%6.2f|%6.4f|%6.2f|%6.2f|%6.2f|\n", QQ{i}.node, QQ{i}.m, serv, V(c,i), U(c,i), R(c,i), Q(c,i), X(c,i) ); endfor printf("+---+---------------+---+------+------+------+------+------+------+\n"); printf("| THIS CLASS STATISTICS | ---- |%6.2f|%6.2f|%6.2f|\n", dot(R(c,:),V(c,:)), sum(Q(c,:)), X(c,1)/V(c,1) ); printf("+---+---------------+---+------+------+------+------+------+------+\n\n"); endfor endfunction %!test %! # Example 8.7 p. 349 Bolch et al. %! N = 3; %! Q1 = qnmknode( "m/m/m-fcfs", .5, 2 ); %! Q2 = qnmknode( "m/m/m-fcfs", 1/1.667 ); %! Q3 = qnmknode( "m/m/m-fcfs", 1/1.25 ); %! Q4 = qnmknode( "m/m/m-fcfs", 1./[1 2 3] ); %! V = [ 1 .5 .5 1 ]; %! [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); %! assert( Q, [0.624 0.473 0.686 1.217], 1e-3 ); %! assert( R, [0.512 0.776 1.127 1], 1e-3 ); %!test %! # Example 8.7 p. 349 Bolch et al. %! N = 3; %! Q1 = qnmknode( "m/m/m-fcfs", 1/2, 2 ); %! Q2 = qnmknode( "m/m/m-fcfs", 1/1.667 ); %! Q3 = qnmknode( "m/m/m-fcfs", 1/1.25 ); %! Q4 = qnmknode( "-/g/inf", 1 ); %! V = [ 1 .5 .5 1 ]; %! [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); %! assert( Q, [0.624 0.473 0.686 1.217], 1e-3 ); %! assert( R, [0.512 0.776 1.127 1], 1e-3 ); %!test %! # Example 8.4 p. 333 Bolch et al. %! N = 3; %! Q1 = qnmknode( "m/m/m-fcfs", .5, 2 ); %! Q2 = qnmknode( "m/m/m-fcfs", .6 ); %! Q3 = qnmknode( "m/m/m-fcfs", .8 ); %! Q4 = qnmknode( "-/g/inf", 1 ); %! V = [ 1 .5 .5 1 ]; %! [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); %! assert( U(1:3), [.304 .365 .487], 1e-3 ); %! assert( X, [1.218 0.609 0.609 1.218], 1e-3 ); %!test %! # Same as above, with center 1 replaced with a load-dependent service center %! N = 3; %! Q1 = qnmknode( "m/m/m-fcfs", [.5 .25 .25] ); %! Q2 = qnmknode( "m/m/m-fcfs", .6 ); %! Q3 = qnmknode( "m/m/m-fcfs", .8 ); %! Q4 = qnmknode( "m/m/m-fcfs", [1 1/2 1/3] ); %! V = [ 1 .5 .5 1 ]; %! [U R Q X] = qnsolve("closed",N, { Q1, Q2, Q3, Q4 }, V); %! assert( U(2:3), [.365 .487], 1e-3 ); ## NOTE: Utilization U(1) is computed differently from M/M/m nodes and load-dependent M/M/1 nodes %! assert( X, [1.218 0.609 0.609 1.218], 1e-3 ); %!test %! # Example 7.4 p. 287 Bolch et al. %! QQ = { qnmknode( "m/m/m-fcfs", 0.04 ), ... %! qnmknode( "m/m/m-fcfs", 0.03 ), ... %! qnmknode( "m/m/m-fcfs", 0.06 ), ... %! qnmknode( "m/m/m-fcfs", 0.05 ) }; %! P = [ 0 0.5 0.5 0; 1 0 0 0; 0.6 0 0 0; 1 0 0 0 ]; %! lambda = [0 0 0 4]; %! [U R Q X] = qnsolve("open", sum(lambda), QQ, qnosvisits(P,lambda) ); %! assert( X, [20 10 10 4], 1e-4 ); %! assert( U, [0.8 0.3 0.6 0.2], 1e-2 ); %! assert( R, [0.2 0.043 0.15 0.0625], 1e-3 ); %! assert( Q, [4, 0.429 1.5 0.25], 1e-3 ); %!test %! V = [1 1; 1 1]; %! Q1 = qnmknode( "m/m/m-fcfs", [1;2] ); %! Q2 = qnmknode( "m/m/m-fcfs", [3;4] ); %! lambda = [3/19 2/19]; %! [U R Q] = qnsolve("open", lambda, { Q1, Q2 }, diag( lambda / sum(lambda) ) * V); %! assert( U(1,1), 3/19, 1e-6 ); %! assert( U(2,1), 4/19, 1e-6 ); %! assert( R(1,1), 19/12, 1e-6 ); %! assert( R(1,2), 57/2, 1e-6 ); %! assert( Q(1,1), .25, 1e-6 ); ## Example 9.5 p. 337, Bolch et al. %!test %! QQ = { qnmknode( "m/m/m-fcfs", [0.2; 0.2], 2 ), ... %! qnmknode( "-/g/1-ps", [0.4; 0.6] ), ... %! qnmknode( "-/g/inf", [1; 2] ) }; %! V = [ 1 0.6 0.4; 1 0.3 0.7 ]; %! N = [ 2 1 ]; %! [U R Q X] = qnsolve( "closed", N, QQ, V ); %! assert( Q, [ 0.428 0.726 0.845; 0.108 0.158 0.734 ], 1e-3 ); %! assert( X(1,1), 2.113, 1e-3 ); # CHECK %! assert( X(2,1), 0.524, 1e-3 ); # CHECK %! assert( all( all(U(:,[1,2])<=1) ) ); ## Same as above, but with general load-dependent centers %!test %! QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), ... %! qnmknode( "-/g/1-ps", [0.4; 0.6] ), ... %! qnmknode( "-/g/inf", [1; 2] ) }; %! V = [ 1 0.6 0.4; 1 0.3 0.7 ]; %! N = [ 2 1 ]; %! [U R Q X] = qnsolve( "closed", N, QQ, V ); %! assert( Q, [ 0.428 0.726 0.845; 0.108 0.158 0.734 ], 1e-3 ); %! assert( X(1,1), 2.113, 1e-3 ); # CHECK %! assert( X(2,1), 0.524, 1e-3 ); # CHECK %! assert( all( all(U(:,[1,2])<=1) ) ); %!test %! # example p. 26 Schwetman %! QQ = { qnmknode( "m/m/m-fcfs", [.25; .25] ), %! qnmknode( "-/g/1-ps", [0; .1] ) }; %! V = [1 0; 1 1]; %! lambda = [1 0]; %! N = [0 3]; %! [U R Q X] = qnsolve( "mixed", lambda, N, QQ, V ); %! assert( U(1,1), .25, 1e-3 ); %! assert( X(1,1), 1.0, 1e-3 ); %! assert( [R(1,1) R(2,1) R(2,2)], [1.201 0.885 0.135], 1e-3 ); %!demo %! QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), ... %! qnmknode( "-/g/1-ps", [0.4; 0.6] ), ... %! qnmknode( "-/g/inf", [1; 2] ) }; %! V = [ 1 0.6 0.4; ... %! 1 0.3 0.7 ]; %! N = [ 2 1 ]; %! [U R Q X] = qnsolve( "closed", N, QQ, V ); queueing/inst/qnomaba.m0000664000175000017500000000672612762300434015047 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnomaba (@var{lambda}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Rl}] =} qnomaba (@var{lambda}, @var{S}, @var{V}) ## ## @cindex bounds, asymptotic ## @cindex open network ## @cindex multiclass network, open ## ## Compute Asymptotic Bounds for open, multiclass networks with @math{K} ## service centers and @math{C} customer classes. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda}(c) ## class @math{c} arrival rate to the system (vector of length ## @math{C}, @code{@var{lambda}(c) > 0}). ## ## @item @var{D}(c, k) ## class @math{c} service demand at center @math{k} (@math{C \times K} ## matrix, @code{@var{D}(c, k) @geq{} 0}). ## ## @item @var{S}(c, k) ## mean service time of class @math{c} requests at center @math{k} ## (@math{C \times K} matrix, @code{@var{S}(c, k) @geq{} 0}). ## ## @item @var{V}(c, k) ## mean number of visits of class @math{c} requests at center @math{k} ## (@math{C \times K} matrix, @code{@var{V}(c, k) @geq{} 0}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl}(c) ## @item @var{Xu}(c) ## lower and upper bounds of class @math{c} throughput. ## @code{@var{Xl}(c)} is always @math{0} since there can be no lower ## bound on the throughput of open networks (vector of length ## @math{C}). ## ## @item @var{Rl}(c) ## @item @var{Ru}(c) ## lower and upper bounds of class @math{c} response time. ## @code{@var{Ru}(c)} is always @code{+inf} since there can be no ## upper bound on the response time of open networks (vector of length ## @math{C}). ## ## @end table ## ## @seealso{qnombsb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper R_lower R_upper] = qnomaba( lambda, S, V ) if ( nargin < 2 || nargin > 3 ) print_usage(); endif (isvector(lambda) && length(lambda)>0) || ... error( "lambda must be a nonempty vector" ); all(lambda > 0) || ... error( "lambda must contain positive values" ); lambda = lambda(:)'; C = length(lambda); ( ismatrix(S) && rows(S)==C ) || ... error( "S/D must be a matrix >=0 with %d rows", C ); all(S(:)>=0) || ... error( "S/D must contain nonnegative values" ); K = columns(S); if ( nargin < 3 ) V = ones(size(S)); else ( ismatrix(V) && size_equal(S,V) ) || ... error( "V must be a %d x %d matrix", C, K); all(V(:)>=0) || ... error( "V must contain nonnegative values" ); endif D = S.*V; X_lower = zeros(1,C); X_upper = 1./max(D,[],2)'; R_lower = sum(D,2)'; R_upper = +inf(1,C); endfunction %!test %! fail( "qnomaba( [1 1], [1 1 1; 1 1 1; 1 1 1] )", "2 rows" ); queueing/inst/qncsconv.m0000664000175000017500000001724613356122103015255 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsconv (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsconv (@var{N}, @var{S}, @var{V}, @var{m}) ## ## @cindex closed network, single class ## @cindex normalization constant ## @cindex convolution algorithm ## ## Analyze product-form, single class closed networks with @math{K} service centers using the convolution algorithm. ## ## Load-independent service centers, multiple servers (@math{M/M/m} ## queues) and IS nodes are supported. For general load-dependent ## service centers, use @code{qncsconvld} instead. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## Number of requests in the system (@code{@var{N}>0}). ## ## @item @var{S}(k) ## average service time on center @math{k} (@code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## visit count of service center @math{k} (@code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. If @code{@var{m}(k) < 1}, ## center @math{k} is a delay center (IS); if @code{@var{m}(k) @geq{} ## 1}, center @math{k} it is a regular @math{M/M/m} queueing center ## with @code{@var{m}(k)} identical servers. Default is ## @code{@var{m}(k) = 1} for all @math{k}. ## ## @end table ## ## @strong{OUTPUT} ## ## @table @code ## ## @item @var{U}(k) ## center @math{k} utilization. ## For IS nodes, @code{@var{U}(k)} is the @emph{traffic intensity} ## @code{@var{X}(k) * @var{S}(k)}. ## ## @item @var{R}(k) ## average response time of center @math{k}. ## ## @item @var{Q}(k) ## average number of customers at center @math{k}. ## ## @item @var{X}(k) ## throughput of center @math{k}. ## ## @item @var{G}(n) ## Vector of normalization constants. @code{@var{G}(n+1)} contains the value of ## the normalization constant with @math{n} requests ## @math{G(n)}, @math{n=0, @dots{}, N}. ## ## @end table ## ## @strong{NOTE} ## ## For a network with @math{K} service centers and @math{N} requests, ## this implementation of the convolution algorithm has time and space ## complexity @math{O(NK)}. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Jeffrey P. Buzen, @cite{Computational Algorithms for Closed Queueing ## Networks with Exponential Servers}, Communications of the ACM, volume ## 16, number 9, September 1973, ## pp. 527--531. @uref{http://doi.acm.org/10.1145/362342.362345, 10.1145/362342.362345} ## @end itemize ## ## This implementation is based on G. Bolch, S. Greiner, H. de Meer and ## K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and ## Performance Evaluation with Computer Science Applications}, Wiley, ## 1998, pp. 313--317. ## ## @seealso{qncsconvld} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X G] = qncsconv( varargin ) if ( nargin < 3 || nargin > 4 ) print_usage(); endif ## To be compliant with the reference, we use K to denote the ## population size [err K S V m] = qncschkparam( varargin{:} ); isempty(err) || error(err); N = length(S); # Number of service centers ## This implementation is based on G. Bolch, S. Greiner, H. de Meer ## and K. Trivedi, Queueing Networks and Markov Chains: Modeling and ## Performance Evaluation with Computer Science Applications, Wiley, ## 1998, pp. 313--317. ## First, we remember the indexes of IS nodes i_delay = find(m<1); m( i_delay ) = K; # IS nodes are handled as if they were M/M/K nodes with number of servers equal to the population size K, such that queueing never occurs. ## Initialization G_n = G_nm1 = zeros(1,K+1); F_n = zeros(N,K+1); F_n(:,1) = 1; k=1:K; G_n(1) = 1; G_n(k+1) = F_n(1,k+1) = F(1,k,V,S,m); ## Main convolution loop for n=2:N G_nm1 = G_n; k=1:K; F_n(n,1+k) = F(n,k,V,S,m); # G_n(1) = 1; G_n = conv( F_n(n,:), G_nm1(:) )(1:K+1); endfor ## Done computation of G(n,k). G = G_n(:)'; # ensure G is a row vector ## Computes performance measures X = V*G(K)/G(K+1); U = X .* S ./ m; ## Adjust utilization of delay centers U(i_delay) = X(i_delay) .* S(i_delay); Q = zeros(1,N); i_multi = find(m>1); for i=i_multi G_N_i = zeros(1,K+1); G_N_i(1) = 1; for k=1:K j=1:k; G_N_i(k+1) = G(k+1)-dot( F_n(i,j+1), G_N_i(k-j+1) ); endfor k=0:K; p_i(k+1) = F_n(i,k+1)./G(K+1).*G_N_i(K-k+1); Q(i) = dot( k, p_i( k+1 ) ); endfor i_single = find(m==1); for i=i_single k=1:K; Q(i) = sum( ( V(i)*S(i) ) .^ k .* G(K+1-k)/G(K+1) ); endfor R = Q ./ X; endfunction %!test %! # Example 8.1 p. 318 Bolch et al. %! K=3; %! S = [ 1/0.8 1/0.6 1/0.4 ]; %! m = [2 3 1]; %! V = [ 1 .667 .2 ]; %! [U R Q X G] = qncsconv( K, S, V, m ); %! assert( G, [1 2.861 4.218 4.465], 5e-3 ); %! assert( X, [0.945 0.630 0.189], 1e-3 ); %! assert( U, [0.590 0.350 0.473], 1e-3 ); %! assert( Q, [1.290 1.050 0.660], 1e-3 ); %! assert( R, [1.366 1.667 3.496], 1e-3 ); %!test %! # Example 8.3 p. 331 Bolch et al. %! # compare results of convolution to those of mva %! S = [ 0.02 0.2 0.4 0.6 ]; %! K = 6; %! V = [ 1 0.4 0.2 0.1 ]; %! [U_mva R_mva Q_mva X_mva G_mva] = qncsmva(K, S, V); %! [U_con R_con Q_con X_con G_con] = qncsconv(K, S, V); %! assert( U_mva, U_con, 1e-5 ); %! assert( R_mva, R_con, 1e-5 ); %! assert( Q_mva, Q_con, 1e-5 ); %! assert( X_mva, X_con, 1e-5 ); %! assert( G_mva, G_con, 1e-5 ); %!test %! # Compare the results of convolution to those of mva %! S = [ 0.02 0.2 0.4 0.6 ]; %! K = 6; %! V = [ 1 0.4 0.2 0.1 ]; %! m = [ 1 -1 2 1 ]; # center 2 is IS %! [U_mva R_mva Q_mva X_mva] = qncsmva(K, S, V, m); %! [U_con R_con Q_con X_con G] = qncsconv(K, S, V, m ); %! assert( U_mva, U_con, 1e-5 ); %! assert( R_mva, R_con, 1e-5 ); %! assert( Q_mva, Q_con, 1e-5 ); %! assert( X_mva, X_con, 1e-5 ); ## result = F(i,j,v,S,m) ## ## Helper fuction to compute F(i,j) as defined in Eq 7.61 p. 289 of ## Bolch, Greiner, de Meer, Trivedi "Queueing Networks and Markov ## Chains: Modeling and Performance Evaluation with Computer Science ## Applications", Wiley, 1998. This function has been vectorized, ## and accepts a vector as parameter j. function result = F(i,j,v,S,m) isscalar(i) || ... error( "i must be a scalar" ); k_i = j; if ( m(i) == 1 ) result = ( v(i)*S(i) ).^k_i; else ii = find(k_i<=m(i)); ## if k_i<=m(i) result(ii) = ( v(i)*S(i) ).^k_i(ii) ./ factorial(k_i(ii)); ii = find(k_i>m(i)); ## if k_i>m(i) result(ii) = ( v(i)*S(i) ).^k_i(ii) ./ ( factorial(m(i))*m(i).^(k_i(ii)-m(i)) ); endif endfunction %!demo %! n = [1 2 0]; %! N = sum(n); # Total population size %! S = [ 1/0.8 1/0.6 1/0.4 ]; %! m = [ 2 3 1 ]; %! V = [ 1 .667 .2 ]; %! [U R Q X G] = qncsconv( N, S, V, m ); %! p = [0 0 0]; # initialize p %! # Compute the probability to have n(k) jobs at service center k %! for k=1:3 %! p(k) = (V(k)*S(k))^n(k) / G(N+1) * ... %! (G(N-n(k)+1) - V(k)*S(k)*G(N-n(k)) ); %! printf("Prob( n(%d) = %d )=%f\n", k, n(k), p(k) ); %! endfor queueing/inst/qnmh1.m0000664000175000017500000000250212762046576014457 0ustar morenomoreno## Copyright (C) 2009 Dmitry Kolesnikov ## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qnmh1 (@var{lambda}, @var{mu}, @var{alpha}) ## ## This function is deprecated. Please use @code{qsmh1} instead. ## ## @seealso{qsmh1} ## ## @end deftypefn ## Author: Dmitry Kolesnikov function [U R Q X p0] = qnmh1( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmh1 is deprecated. Please use qsmh1 instead"); endif [U R Q S p0] = qsmh1( varargin{:} ); endfunction queueing/inst/qncmcb.m0000664000175000017500000001114413356123163014664 0ustar morenomoreno## Copyright (C) 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmcb (@var{N}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmcb (@var{N}, @var{S}, @var{V}) ## ## @cindex multiclass network, closed ## @cindex closed multiclass network ## @cindex bounds, composite ## @cindex composite bounds ## ## Composite Bound (CB) on throughput and response time for closed multiclass networks. ## ## This function implements the Composite Bound Method described in T. ## Kerola, @cite{The Composite Bound Method (CBM) for Computing ## Throughput Bounds in Multiple Class Environments}, Technical Report ## CSD-TR-475, Purdue University, march 13, 1984 (revised august 27, ## 1984). ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N}(c) ## number of class @math{c} requests in the system. ## ## @item @var{D}(c, k) ## class @math{c} service demand ## at center @math{k} (@code{@var{S}(c,k) @geq{} 0}). ## ## @item @var{S}(c, k) ## mean service time of class @math{c} ## requests at center @math{k} (@code{@var{S}(c,k) @geq{} 0}). ## ## @item @var{V}(c,k) ## average number of visits of class @math{c} ## requests to center @math{k} (@code{@var{V}(c,k) @geq{} 0}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl}(c) ## @itemx @var{Xu}(c) ## Lower and upper class @math{c} throughput bounds. ## ## @item @var{Rl}(c) ## @itemx @var{Ru}(c) ## Lower and upper class @math{c} response time bounds. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Teemu Kerola, @cite{The Composite Bound Method (CBM) for Computing ## Throughput Bounds in Multiple Class Environments}, Performance ## Evaluation Vol. 6, Issue 1, March 1986, DOI ## @uref{http://dx.doi.org/10.1016/0166-5316(86)90002-7, ## 10.1016/0166-5316(86)90002-7}. Also available as ## @uref{http://docs.lib.purdue.edu/cstech/395/, Technical Report ## CSD-TR-475}, Department of Computer Sciences, Purdue University, mar ## 13, 1984 (Revised Aug 27, 1984). ## @end itemize ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qncmcb( varargin ) if ( nargin < 2 || nargin > 3 ) print_usage(); endif [err N S V m Z] = qncmchkparam( varargin{:} ); isempty(err) || error(err); all(m == 1) || ... error("this function only supports single-server FCFS centers"); all(Z == 0) || ... error("this function does not support think time"); [C K] = size(S); D = S .* V; [Xl] = qncmbsb(N, D); Xu = zeros(1,C); D_max = max(D,[],2)'; for r=1:C # FIXME: vectorize this ## This is equation (13) from T. Kerola, The Composite Bound Method ## (CBM) for Computing Throughput Bounds in Multiple Class ## Environments, Technical Report CSD-TR-475, Purdue University, ## march 13, 1984 (revised august 27, 1984) ## http://docs.lib.purdue.edu/cstech/395/ ## The only modification here is to apply also the upper bound ## 1/D_max(r), eveb though it seems redundant. s = (1:C != r); # boolean array tmp = (1 .- Xl(s)*D(s,:)) ./ D(r,:); Xu(r) = min([tmp 1/D_max(r)]); endfor Rl = N ./ Xu; Ru = N ./ Xl; endfunction %!demo %! S = [10 7 5 4; ... %! 5 2 4 6]; %! NN=20; %! Xl = Xu = Xmva = zeros(NN,2); %! for n=1:NN %! N=[n,10]; %! [a b] = qncmcb(N,S); %! Xl(n,:) = a; Xu(n,:) = b; %! [U R Q X] = qncmmva(N,S,ones(size(S))); %! Xmva(n,:) = X(:,1)'; %! endfor %! subplot(2,1,1); %! plot(1:NN,Xl(:,1),"linewidth", 2, 1:NN,Xu(:,1),"linewidth", 2, ... %! 1:NN,Xmva(:,1),";MVA;"); %! title("Class 1 throughput"); %! legend("location", "northwest"); legend("boxoff"); %! subplot(2,1,2); %! plot(1:NN,Xl(:,2),"linewidth", 2, 1:NN,Xu(:,2), "linewidth", 2,... %! 1:NN,Xmva(:,2),";MVA;"); %! title("Class 2 throughput"); %! legend("boxoff"); %! xlabel("Number of class 1 requests"); queueing/inst/qnmknode.m0000664000175000017500000001243313123252506015233 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{Q} =} qnmknode (@var{"m/m/m-fcfs"}, @var{S}) ## @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"m/m/m-fcfs"}, @var{S}, @var{m}) ## @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"m/m/1-lcfs-pr"}, @var{S}) ## @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/1-ps"}, @var{S}) ## @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/1-ps"}, @var{S}, @var{s2}) ## @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/inf"}, @var{S}) ## @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/inf"}, @var{S}, @var{s2}) ## ## Creates a node; this function can be used together with ## @code{qnsolve}. It is possible to create either single-class nodes ## (where there is only one customer class), or multiple-class nodes ## (where the service time is given per-class). Furthermore, it is ## possible to specify load-dependent service times. String literals ## are case-insensitive, so for example @var{"-/g/inf"}, @var{"-/G/inf"} ## and @var{"-/g/INF"} are all equivalent. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{S} ## Mean service time. ## ## @itemize ## ## @item If @math{S} is a scalar, ## it is assumed to be a load-independent, class-independent service time. ## ## @item If @math{S} is a column vector, then @code{@var{S}(c)} is assumed to ## the the load-independent service time for class @math{c} customers. ## ## @item If @math{S} is a row vector, then @code{@var{S}(n)} is assumed to be ## the class-independent service time at the node, when there are @math{n} ## requests. ## ## @item Finally, if @var{S} is a two-dimensional matrix, then ## @code{@var{S}(c,n)} is assumed to be the class @math{c} service time ## when there are @math{n} requests at the node. ## ## @end itemize ## ## @item @var{m} ## Number of identical servers at the node. Default is @code{@var{m}=1}. ## ## @item @var{s2} ## Squared coefficient of variation for the service time. Default is 1.0. ## ## @end table ## ## The returned struct @var{Q} should be considered opaque to the client. ## ## @c The returned struct @var{Q} has the following fields: ## ## @c @table @var ## ## @c @item Q.node ## @c (String) type of the node; valid values are @code{"m/m/m-fcfs"}, ## @c @code{"-/g/1-lcfs-pr"}, @code{"-/g/1-ps"} (Processor-Sharing) ## @c and @code{"-/g/inf"} (Infinite Server, or delay center). ## ## @c @item Q.S ## @c Average service time. If @code{@var{Q}.S} is a vector, then ## @c @code{@var{Q}.S(i)} is the average service time at that node ## @c if there are @math{i} requests. ## ## @c @item Q.m ## @c Number of identical servers at a @code{"m/m/m-fcfs"}. Default is 1. ## ## @c @item Q.c ## @c Number of customer classes. Default is 1. ## ## @c @end table ## ## @seealso{qnsolve} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function Q = qnmknode( node, S, varargin ) ischar(node) || ... error( "Parameter \"node\" must be a string" ); node = tolower(node); isvector(S) || ismatrix(S) || ... error( "Parameter \"S\" must be a vector" ); m = 1; s2 = ones( size(S) ); if ( strcmp(node, "m/m/m-fcfs") ) ## M/M/k multiserver node if ( nargin > 3 ) print_usage(); endif if ( 3 == nargin ) m = varargin{1}; endif elseif ( strcmp(node, "m/m/1/k-fcfs") ) ## M/M/1/k finite capacity node if ( nargin > 3 ) print_usage(); endif if ( 3 == nargin ) k = varargin{1}; endif elseif ( strcmp(node, "-/g/1-lcfs-pr") ) ## -/G/1-LCFS-PR node ( 2 == nargin || 3 == nargin ) || ... print_usage(); if ( 3 == nargin ) s2 = varargin{1}; endif elseif ( strcmp(node, "-/g/1-ps") ) ## -/G/1-PS (processor sharing) node ( 2 == nargin || 3 == nargin ) || ... print_usage(); if ( 3 == nargin ) s2 = varargin{1}; endif elseif ( strcmp(node, "-/g/inf") ) ## -/G/inf (Infinite Server) node ( 2 == nargin || 3 == nargin ) || ... print_usage(); if ( 3 == nargin ) s2 = varargin{1}; endif else error( "Unknown node type \"%s\". node type must be one of \"m/m/m-fcfs\", \"-/g/1-lcfs-pr\", \"-/g/1-ps\" and \"-/g/inf\"", node ); endif ( isnumeric(m) && m>=1 ) || ... error("m must be >=1"); ( isnumeric(s2) && s2>= 0 ) || ... error("s2 must be >=0"); Q = struct( "node", node, "m", m, "S", S, "s2", s2, "c", rows(S), "comment", "" ); endfunction %!test %! fail( "qnmknode( 'pippo', 1 )", "must be one" ); %! fail( "qnmknode( '-/g/1-ps', 1, 1, 1)", "Invalid call" ); queueing/inst/qncmbsb.m0000664000175000017500000001232412762302067015051 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmbsb (@var{N}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmbsb (@var{N}, @var{S}, @var{V}) ## ## @cindex bounds, balanced system ## @cindex balanced system bounds ## @cindex multiclass network, closed ## @cindex closed multiclass network ## ## Compute Balanced System Bounds for closed, multiclass networks ## with @math{K} service centers and @math{C} customer classes. ## Only single-server nodes are supported. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N}(c) ## number of class @math{c} requests in the system (vector of length ## @math{C}). ## ## @item @var{D}(c, k) ## class @math{c} service demand at center @math{k} (@math{C \times K} ## matrix, @code{@var{D}(c,k) @geq{} 0}). ## ## @item @var{S}(c, k) ## mean service time of class @math{c} ## requests at center @math{k} (@math{C \times K} matrix, @code{@var{S}(c,k) @geq{} 0}). ## ## @item @var{V}(c,k) ## average number of visits of class @math{c} ## requests to center @math{k} (@math{C \times K} matrix, @code{@var{V}(c,k) @geq{} 0}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl}(c) ## @itemx @var{Xu}(c) ## Lower and upper class @math{c} throughput bounds (vector of length @math{C}). ## ## @item @var{Rl}(c) ## @itemx @var{Ru}(c) ## Lower and upper class @math{c} response time bounds (vector of length @math{C}). ## ## @end table ## ## @seealso{qncsbsb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qncmbsb( varargin ) if ( nargin<2 || nargin>5 ) print_usage(); endif [err N S V m Z] = qncmchkparam( varargin{:} ); isempty(err) || error(err); all(m<=1) || ... error("Multiple-server nodes are not supported"); all(Z == 0 ) || ... error("This function only supports Z=0"); if ( sum(N) == 0 ) # handle trivial case of empty network Xl = Xu = Rl = Ru = zeros(size(S)); else D = S .* V; K = columns(S); ## Equations from T. Kerola, The Composite Bound Method (CBM) for ## Computing Throughput Bounds in Multiple Class Environments}, ## Technical Report CSD-TR-475, Department of Computer Sciences, ## Purdue University, mar 13 1984 (Revisted aug 27, 1984), available ## at http://docs.lib.purdue.edu/cstech/395/ Dc = sum(D,2)'; D_max = max(D,[],2)'; D_min = min(D,[],2)'; Xl = N ./ (Dc .+ (sum(N)-1) .* D_max); Xu = min( 1./D_max, N ./ ((K+sum(N)-1) .* D_min)); Rl = N ./ Xu; Ru = N ./ Xl; endif endfunction %!test %! fail("qncmbsb([],[])", "nonempty"); %! fail("qncmbsb([1 0], [1 2 3])", "2 rows"); %! fail("qncmbsb([1 0], [1 2 3; 4 5 -1])", "nonnegative"); %! fail("qncmbsb([1 2], [1 2 3; 4 5 6], [1 2 3])", "2 x 3"); %! fail("qncmbsb([1 2], [1 2 3; 4 5 6], [1 2 3; 4 5 -1])", "nonnegative"); %! fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1])", "3 elements"); %! fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 2])", "not supported"); %! fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 2 3])", "2 elements"); %! fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 -2])", "nonnegative"); %! fail("qncmbsb([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 0])", "only supports"); %!test %! [Xl Xu Rl Ru] = qncmbsb([0 0], [1 2 3; 1 2 3]); %! assert( all(Xl(:) == 0) ); %! assert( all(Xu(:) == 0) ); %! assert( all(Rl(:) == 0) ); %! assert( all(Ru(:) == 0) ); %!demo %! S = [10 7 5 4; ... %! 5 2 4 6]; %! NN=20; %! Xl = Xu = Rl = Ru = Xmva = Rmva = zeros(NN,2); %! for n=1:NN %! N=[n,10]; %! [a b c d] = qncmbsb(N,S); %! Xl(n,:) = a; Xu(n,:) = b; Rl(n,:) = c; Ru(n,:) = d; %! [U R Q X] = qncmmva(N,S,ones(size(S))); %! Xmva(n,:) = X(:,1)'; Rmva(n,:) = sum(R,2)'; %! endfor %! subplot(2,2,1); %! plot(1:NN,Xl(:,1), 1:NN,Xu(:,1), 1:NN,Xmva(:,1),";MVA;", "linewidth", 2); %! title("Class 1 throughput"); legend("boxoff"); %! subplot(2,2,2); %! plot(1:NN,Xl(:,2), 1:NN,Xu(:,2), 1:NN,Xmva(:,2),";MVA;", "linewidth", 2); %! title("Class 2 throughput"); legend("boxoff"); %! subplot(2,2,3); %! plot(1:NN,Rl(:,1), 1:NN,Ru(:,1), 1:NN,Rmva(:,1),";MVA;", "linewidth", 2); %! title("Class 1 response time"); legend("location", "northwest"); legend("boxoff"); %! subplot(2,2,4); %! plot(1:NN,Rl(:,2), 1:NN,Ru(:,2), 1:NN,Rmva(:,2),";MVA;", "linewidth", 2); %! title("Class 2 response time"); legend("location", "northwest"); legend("boxoff"); queueing/inst/ctmcexps.m0000664000175000017500000001252013320152471015241 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{L} =} ctmcexps (@var{Q}, @var{t}, @var{p} ) ## @deftypefnx {Function File} {@var{L} =} ctmcexps (@var{Q}, @var{p}) ## ## @cindex Markov chain, continuous time ## @cindex expected sojourn time, CTMC ## ## With three arguments, compute the expected times @code{@var{L}(i)} ## spent in each state @math{i} during the time interval @math{[0,t]}, ## assuming that the initial occupancy vector is @var{p}. With two ## arguments, compute the expected time @code{@var{L}(i)} spent in each ## transient state @math{i} until absorption. ## ## @strong{Note:} In its current implementation, this function ## requires that an absorbing state is reachable from any ## non-absorbing state of @math{Q}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{Q}(i,j) ## @math{N \times N} infinitesimal generator matrix. @code{@var{Q}(i,j)} ## is the transition rate from state @math{i} to state @math{j}, @math{1 ## @leq{} i \neq j @leq{} N}. The matrix @var{Q} must also satisfy the ## condition @math{\sum_{j=1}^N Q_{ij} = 0}. ## ## @item @var{t} ## If given, compute the expected sojourn times in @math{[0,t]} ## ## @item @var{p}(i) ## Initial occupancy probability vector; @code{@var{p}(i)} is the ## probability the system is in state @math{i} at time 0, @math{i = 1, ## @dots{}, N} ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{L}(i) ## If this function is called with three arguments, @code{@var{L}(i)} is ## the expected time spent in state @math{i} during the interval ## @math{[0,t]}. If this function is called with two arguments ## @code{@var{L}(i)} is the expected time spent in transient state ## @math{i} until absorption; if state @math{i} is absorbing, ## @code{@var{L}(i)} is zero. ## ## @end table ## ## @seealso{dtmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function L = ctmcexps( Q, varargin ) persistent epsilon = 10*eps; if ( nargin < 2 || nargin > 3 ) print_usage(); endif [N err] = ctmcchkQ(Q); (N>0) || ... error(err); if ( nargin == 2 ) p = varargin{1}; else t = varargin{1}; p = varargin{2}; endif ( isvector(p) && length(p) == size(Q,1) && all(p>=0) && abs(sum(p)-1.0)= 0 ) || ... error( "t must be >= 0" ); ## F(x) are the transient state occupancy probabilities at time x ## F(x) = p*expm(Q*x) (see function ctmc()). F = @(x) (p*expm(Q*x)); L = quadv(F,0,t); else ## FIXME: deprecate this? ( isvector(t) && abs(t(1)) < epsilon ) || ... error( "t must be a vector, and t(1) must be 0.0" ); t = t(:)'; # make tt a row vector ff = @(x,t) (x(:)'*Q+p); fj = @(x,t) (Q); L = lsode( {ff, fj}, zeros(size(p)), t ); endif else # absorbing case ## Identify absorbing states. If there are no absorbing states, ## raise an error. N = rows(Q); tr = find( any( abs(Q) > epsilon, 2 ) ); # non-absorbing states if ( length( tr ) == N ) error( "There are no absorbing states" ); endif QN = Q(tr,tr); pN = p(tr); LN = -pN*inv(QN); L = zeros(1,N); L(tr) = LN; endif endfunction %!test %! Q = [-1 1; 1 -1]; %! L = ctmcexps(Q,10,[1 0]); %! L = ctmcexps(Q,linspace(0,10,100),[1 0]); %!test %! Q = ctmcbd( [1 2 3], [3 2 1] ); %! p0 = [1 0 0 0]; %! t = linspace(0,10,10); %! L1 = L2 = zeros(length(t),4); %! # compute L using the differential equation formulation %! ff = @(x,t) (x(:)'*Q+p0); %! fj = @(x,t) (Q); %! L1 = lsode( {ff, fj}, zeros(size(p0)), t ); %! # compute L using ctmcexps (integral formulation) %! for i=1:length(t) %! L2(i,:) = ctmcexps(Q,t(i),p0); %! endfor %! assert( L1, L2, 1e-5); %!demo %! lambda = 0.5; %! N = 4; %! b = lambda*[1:N-1]; %! d = zeros(size(b)); %! Q = ctmcbd(b,d); %! t = linspace(0,10,100); %! p0 = zeros(1,N); p0(1)=1; %! L = zeros(length(t),N); %! for i=1:length(t) %! L(i,:) = ctmcexps(Q,t(i),p0); %! endfor %! plot( t, L(:,1), ";State 1;", "linewidth", 2, ... %! t, L(:,2), ";State 2;", "linewidth", 2, ... %! t, L(:,3), ";State 3;", "linewidth", 2, ... %! t, L(:,4), ";State 4;", "linewidth", 2 ); %! legend("location","northwest"); legend("boxoff"); %! xlabel("Time"); %! ylabel("Expected sojourn time"); %!demo %! lambda = 0.5; %! N = 4; %! b = lambda*[1:N-1]; %! d = zeros(size(b)); %! Q = ctmcbd(b,d); %! p0 = zeros(1,N); p0(1)=1; %! L = ctmcexps(Q,p0); %! disp(L); queueing/inst/ctmc_taexps.m0000664000175000017500000000311312762046576015744 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} ctmc_taexps (@var{Q}, @var{t}, @var{p}) ## @deftypefnx {Function File} {@var{M} =} ctmc_taexps (@var{Q}, @var{p}) ## ## This function is deprecated. Please use @code{ctmctaexps} instead. ## ## @seealso{ctmctaexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function M = ctmc_taexps( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "ctmc_taexps is deprecated. Please use ctmctaexps instead"); endif M = ctmctaexps( varargin{:} ); endfunction %!test %! Q = [ 0 0.1 0 0; ... %! 0.9 0 0.1 0; ... %! 0 0.9 0 0.1; ... %! 0 0 0 0 ]; %! Q -= diag( sum(Q,2) ); %! M = ctmc_taexps(Q, [1 0 0 0]); %! assert( sum(M), 1, 10*eps ); queueing/inst/qnammm.m0000664000175000017500000000273612762046576014732 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnammm (@var{lambda}, @var{mu}) ## ## This function is deprecated. Please use @code{qsammm} instead. ## ## @seealso{qsammm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pm] = qnammm( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnammm is deprecated. Please use qsammm instead"); endif [U R Q X p0 pm] = qsammm( varargin{:} ); endfunction %!test %! [U R Q X] = qnammm( 73,[10,15,20,20,25] ); %! assert( U, 0.81, 1e-2 ); %! assert( Q, 6.5278, 1e-4 ); queueing/inst/qnclosedab.m0000664000175000017500000000350512762046576015552 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnclosedab (@var{N}, @dots{}) ## ## This function is deprecated. Please use @code{qncsaba} instead. ## ## @seealso{qncsaba} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qnclosedab( N, D, Z ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnclosedab is deprecated. Please use qncsaba instead"); endif if ( nargin < 3 ) [Xl Xu Rl Ru] = qncsaba( N, D ); else [Xl Xu Rl Ru] = qncsaba( N, D, ones(size(D)), ones(size(D)), Z ); endif endfunction %!test %! fail("qnclosedab(-1,0)", "N must be"); %! fail("qnclosedab(1,[])", "nonempty"); %! fail("qnclosedab(1,[-1 2])", "nonnegative"); %! fail("qnclosedab(1,[1 2 3],-1)", "nonnegative"); ## Example 9.6 p. 913 Bolch et al. %!test %! N = 20; %! D = [ 4.6*2 8 ]; %! Z = 120; %! [X_l X_u R_l R_u] = qnclosedab(N, D, Z); %! assert( [X_u R_l], [0.109 64], 1e-3 ); queueing/inst/ctmcmtta.m0000664000175000017500000000756613356112300015241 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{t} =} ctmcmtta (@var{Q}, @var{p}) ## ## @cindex Markov chain, continuous time ## @cindex continuous time Markov chain ## @cindex CTMC ## @cindex mean time to absorption, CTMC ## ## Compute the Mean-Time to Absorption (MTTA) of the CTMC described by ## the infinitesimal generator matrix @var{Q}, starting from initial ## occupancy probabilities @var{p}. If there are no absorbing states, this ## function fails with an error. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{Q}(i,j) ## @math{N \times N} infinitesimal generator matrix. @code{@var{Q}(i,j)} ## is the transition rate from state @math{i} to state @math{j}, @math{i ## \neq j}. The matrix @var{Q} must satisfy the condition ## @math{\sum_{j=1}^N Q_{i j} = 0} ## ## @item @var{p}(i) ## probability that the system is in state @math{i} ## at time 0, for each @math{i=1, @dots{}, N} ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{t} ## Mean time to absorption of the process represented by matrix @var{Q}. ## If there are no absorbing states, this function fails. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and ## K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and ## Performance Evaluation with Computer Science Applications}, Wiley, ## 1998. ## @end itemize ## ## @seealso{ctmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function t = ctmcmtta( Q, p ) persistent epsilon = 10*eps; if ( nargin != 2 ) print_usage(); endif [N err] = ctmcchkQ(Q); (N>0) || ... error(err); ( isvector(p) && length(p) == N && all(p>=0) && abs(sum(p)-1.0). ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qnconvolutionld (@var{N}, @var{S}, @var{V}) ## ## This function is deprecated. Please use @code{qncsconvld} instead. ## ## @seealso{qncsconvld} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X G] = qnconvolutionld( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnconvolutionld is deprecated. Please use qncsconvld instead"); endif [U R Q X G] = qncsconvld( varargin{:} ); endfunction queueing/inst/qnmminf.m0000664000175000017500000000272112762046576015103 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qnmminf (@var{lambda}, @var{mu}) ## ## This function is deprecated. Please use @code{qsmminf} instead. ## ## @seealso{qsmminf} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0] = qnmminf( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmminf is deprecated. Please use qsmminf instead"); endif [U R Q X p0] = qsmminf( varargin{:} ); endfunction %!test %! fail( "qnmminf( [1 2], [1 2 3] )", "incompatible size"); %! fail( "qnmminf( [-1 -1], [1 1] )", ">0" ); queueing/inst/qnjackson.m0000664000175000017500000000777512762046576015443 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnjackson (@var{lambda}, @var{S}, @var{P} ) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnjackson (@var{lambda}, @var{S}, @var{P}, @var{m} ) ## @deftypefnx {Function File} {@var{pr} =} qnjackson (@var{lambda}, @var{S}, @var{P}, @var{m}, @var{k}) ## ## This function is deprecated. Please use @code{qnos} instead. ## ## @seealso{qnos} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U_or_pi R Q X] = qnjackson( lambda, S, P, m, k ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnjackson is deprecated. Please use qnos insgead"); endif if ( nargin < 3 || nargin > 5 ) print_usage(); endif ( isvector(lambda) && all(lambda>=0) ) || ... error( "lambda must be a vector >= 0" ); lambda=lambda(:)'; # make lambda a row vector N = length(lambda); isvector(S) || ... error( "S must be a vector" ); S = S(:)'; # make S a row vector size_equal(lambda,S) || ... error( "lambda and S must of be of the same length" ); all(S>0) || ... error( "S must be >0" ); [N,N] == size(P) || ... error(" P must be a matrix of size length(lambda) x length(lambda)" ); all(all(P>=0)) && all(sum(P,2)<=1) || ... error( "P is not a transition probability matrix" ); if ( nargin < 4 || isempty(m) ) m = ones(1,N); else [errorcode, lambda, m] = common_size(lambda, m); ( isvector(m) && (errorcode==0) ) || ... error("m and lambda must have the same length" ); endif ## Compute the arrival rates using the traffic equation: l = sum(lambda)*qnosvisits( P, lambda ); ## Check ergodicity for i=1:N if ( m(i)>0 && l(i)>=m(i)/S(i) ) error( "Server %d not ergodic: arrival rate=%f, service rate=%f", i, l(i), m(i)/S(i) ); endif endfor U_or_pi = zeros(1,N); if ( nargin == 5 ) ( isvector(k) && size_equal(lambda,k) ) || ... error( "k must be a vector of the same size as lambda" ); all(k>=0) || ... error( "k must be nonnegative" ); ## compute occupancy probability rho = l .* S ./ m; i = find(m==1); # M/M/1 queues U_or_pi(i) = (1-rho(i)).*rho(i).^k(i); for i=find(m>1) # M/M/k queues k = [0:m(i)-1]; pizero = 1 / (sum( (m(i)*rho(i)).^k ./ factorial(k)) + ... (m(i)*rho(i))^m(i) / (factorial(m(i))*(1-rho(i))) ... ); ## Compute the marginal probabilities U_or_pi(i) = pizero * (m(i)^min(k(i),m(i))) * (rho(i)^k(i)) / ... factorial(min(m(i),k(i))); endfor i = find(m<1); # infinite server nodes U_or_pi(i) = exp(-rho(i)).*rho(i).^k(i)./factorial(k(i)); else ## Compute steady-state parameters U_or_pi = R = Q = X = zeros(1,N); # Initialize vectors ## single server nodes i = find( m==1 ); [U_or_pi(i) R(i) Q(i) X(i)] = qnmm1(l(i),1./S(i)); ## multi server nodes i = find( m>1 ); [U_or_pi(i) R(i) Q(i) X(i)] = qnmmm(l(i),1./S(i),m(i)); ## infinite server nodes i = find( m<1 ); [U_or_pi(i) R(i) Q(i) X(i)] = qnmminf(l(i),1./S(i)); endif endfunction queueing/inst/population_mix.m0000664000175000017500000000251212762046576016503 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {pop_mix =} population_mix (@var{k}, @var{N}) ## ## This function is deprecated. Please use @code{qncmpopmix} instead. ## ## @seealso{qncmpopmix} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function pop_mix = population_mix( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "population_mix is deprecated. Please use qncmpopmix instead"); endif pop_mix = qncmpopmix( varargin{:} ); endfunction queueing/inst/dtmc_mtta.m0000664000175000017500000000467612762046576015425 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{t} @var{N} @var{B}] =} dtmc_mtta (@var{P}) ## @deftypefnx {Function File} {[@var{t} @var{N} @var{B}] =} dtmc_mtta (@var{P}, @var{p0}) ## ## This function is deprecated. Please use @code{dtmcmtta} instead. ## ## @seealso{ctmcmtta} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [t N B] = dtmc_mtta( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "dtmc_mtta is deprecated. Please use dtmcmtta instead"); endif [t N B] = dtmcmtta( varargin{:} ); endfunction %!test %! fail( "dtmc_mtta(1,2,3)" ); %! fail( "dtmc_mtta()" ); %!test %! P = dtmcbd([0 .5 .5 .5], [.5 .5 .5 0]); %! [t N B] = dtmc_mtta(P); %! assert( t, [0 3 4 3 0], 10*eps ); %! assert( B([2 3 4],[1 5]), [3/4 1/4; 1/2 1/2; 1/4 3/4], 10*eps ); %! assert( B(1,1), 1 ); %! assert( B(5,5), 1 ); %!test %! P = dtmcbd([0 .5 .5 .5], [.5 .5 .5 0]); %! [t N B] = dtmc_mtta(P); %! assert( t(3), 4, 10*eps ); %! assert( B(3,1), 0.5, 10*eps ); %! assert( B(3,5), 0.5, 10*eps ); ## Example on p. 422 of [GrSn97] %!test %! P = dtmcbd([0 .5 .5 .5 .5], [.5 .5 .5 .5 0]); %! [t N B] = dtmc_mtta(P); %! assert( t(2:5), [4 6 6 4], 100*eps ); %! assert( B(2:5,1), [.8 .6 .4 .2]', 100*eps ); %! assert( B(2:5,6), [.2 .4 .6 .8]', 100*eps ); ## "Rat maze" problem (p. 453 of [GrSn97]); %!test %! P = zeros(9,9); %! P(1,[2 4]) = .5; %! P(2,[1 5 3]) = 1/3; %! P(3,[2 6]) = .5; %! P(4,[1 5 7]) = 1/3; %! P(5,:) = 0; P(5,5) = 1; %! P(6,[3 5 9]) = 1/3; %! P(7,[4 8]) = .5; %! P(8,[7 5 9]) = 1/3; %! P(9,[6 8]) = .5; %! t = dtmc_mtta(P); %! assert( t, [6 5 6 5 0 5 6 5 6], 10*eps ); queueing/inst/qnclosedmultimva.m0000664000175000017500000000372312762046576017030 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimva (@var{N}, @var{S} ) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimva (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimva (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimva (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimva (@var{N}, @var{S}, @var{P}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedmultimva (@var{N}, @var{S}, @var{P}, @var{m}) ## ## This function is deprecated. Please use @code{qncmmva} instead. ## ## @seealso{qncmmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnclosedmultimva( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnclosedmultimva is deprecated. Please use qncmmva instead"); endif [U R Q X] = qncmmva( varargin{:} ); endfunction queueing/inst/qncsgb.m0000664000175000017500000002212413356123415014676 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## ## @cindex bounds, geometric ## @cindex geometric bounds ## @cindex closed network ## ## Compute Geometric Bounds (GB) on system throughput, system response ## time and server queue lenghts for closed, single-class networks ## with @math{K} service centers and @math{N} requests. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N} ## number of requests in the system (scalar, @code{@var{N} > 0}). ## ## @item @var{D}(k) ## service demand of service center @math{k} (vector of length ## @math{K}, @code{@var{D}(k) @geq{} 0}). ## ## @item @var{S}(k) ## mean service time at center @math{k} (vector of length @math{K}, ## @code{@var{S}(k) @geq{} 0}). ## ## @item @var{V}(k) ## visit ratio to center @math{k} ## (vector of length @math{K}, @code{@var{V}(k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. This function only supports ## @math{M/M/1} queues, therefore @var{m} must be ## @code{ones(size(S))}. ## ## @item @var{Z} ## external delay (think time, @code{@var{Z} @geq{} 0}, scalar). Default is 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl} ## @itemx @var{Xu} ## Lower and upper bound on the system throughput. If @code{@var{Z}>0}, ## these bounds are computed using @emph{Geometric Square-root Bounds} ## (GSB). If @code{@var{Z}==0}, these bounds are computed using @emph{Geometric Bounds} (GB) ## ## @item @var{Rl} ## @itemx @var{Ru} ## Lower and upper bound on the system response time. These bounds ## are derived from @var{Xl} and @var{Xu} using Little's Law: ## @code{@var{Rl} = @var{N} / @var{Xu} - @var{Z}}, ## @code{@var{Ru} = @var{N} / @var{Xl} - @var{Z}} ## ## @item @var{Ql}(k) ## @itemx @var{Qu}(k) ## lower and upper bounds of center @math{K} queue length. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Casale, R. R. Muntz, G. Serazzi, @cite{Geometric Bounds: a ## Non-Iterative Analysis Technique for Closed Queueing Networks}, IEEE ## Transactions on Computers, 57(6):780-794, June ## 2008. @uref{http://doi.ieeecomputersociety.org/10.1109/TC.2008.37, ## 10.1109/TC.2008.37} ## @end itemize ## ## In this implementation we set @math{X^+} and @math{X^-} as the upper ## and lower Asymptotic Bounds as computed by the @command{qncsab} ## function, respectively. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper R_upper R_lower Q_lower Q_upper] = qncsgb( varargin ) ## This implementation is based on the paper: G.Casale, R.R.Muntz, ## G.Serazzi. Geometric Bounds: a Noniterative Analysis Technique for ## Closed Queueing Networks IEEE Transactions on Computers, ## 57(6):780-794, Jun 2008. ## http://doi.ieeecomputersociety.org/10.1109/TC.2008.37 ## The original paper uses the symbol "L" instead of "D" to denote the ## loadings of service centers. In this function we adopt the same ## notation as the paper. if ( nargin < 2 || ( nargin > 5 && nargin != 7 ) ) print_usage(); endif [err N S V m Z] = qncschkparam( varargin{:} ); isempty(err) || error(err); ## This function requires N>0 N > 0 || ... error( "N must be > 0" ); all(m==1) || ... error("this function only supports single server nodes"); L = S .* V; L_tot = sum(L); L_max = max(L); M = length(L); if ( nargin < 6 ) [X_minus X_plus] = qncsaba(N,L,ones(size(L)),m,Z); else X_minus = varargin{6}; X_plus = varargin{7}; endif ##[X_minus X_plus] = [0 1/L_max]; [Q_lower Q_upper] = __compute_Q( N, L, Z, X_plus, X_minus); [Q_lower_Nm1 Q_upper_Nm1] = __compute_Q( N-1, L, Z, X_plus, X_minus); if ( Z > 0 ) ## Use Geometric Square-root Bounds (GSB) i = find(L=0) ) || error( "N is not valid" ); L_tot = sum(L); L_max = max(L); M = length(L); m_max = sum( L == L_max ); y = Y = zeros(1,M); ## first, handle the case of servers with loading less than the ## maximum that is, L(i) < L_max i=find(L 0" ); %! fail( "qncsgb( -1, [1 2])", "nonnegative" ); %! fail( "qncsgb( 1, [1 2],1,[1 -1])", "single server" ); %!# shared test function %!function test_gb( D, expected, Z=0 ) %! for i=1:rows(expected) %! N = expected(i,1); %! [X_lower X_upper Q_lower Q_upper] = qncsgb(N,D,1,1,Z); %! X_exp_lower = expected(i,2); %! X_exp_upper = expected(i,3); %! assert( [N X_lower X_upper], [N X_exp_lower X_exp_upper], 1e-4 ) %! endfor %!xtest %! # table IV %! D = [ 0.1 0.1 0.09 0.08 ]; %! # N X_lower X_upper %! expected = [ 2 4.3040 4.3174; ... %! 5 6.6859 6.7524; ... %! 10 8.1521 8.2690; ... %! 20 9.0947 9.2431; ... %! 80 9.8233 9.8765 ]; %! test_gb(D, expected); %!xtest %! # table V %! D = [ 0.1 0.1 0.09 0.08 ]; %! Z = 1; %! # N X_lower X_upper %! expected = [ 2 1.4319 1.5195; ... %! 5 3.3432 3.5582; ... %! 10 5.7569 6.1410; ... %! 20 8.0856 8.6467; ... %! 80 9.7147 9.8594]; %! test_gb(D, expected, Z); %!test %! P = [0 0.3 0.7; 1 0 0; 1 0 0]; %! S = [1 0.6 0.2]; %! m = ones(1,3); %! V = qncsvisits(P); %! Z = 2; %! Nmax = 20; %! tol = 1e-5; # compensate for numerical errors %! ## Test case with Z>0 %! for n=1:Nmax %! [X_gb_lower X_gb_upper NC NC Q_gb_lower Q_gb_upper] = qncsgb(n, S.*V, 1, 1, Z); %! [U R Q X] = qnclosed( n, S, V, m, Z ); %! X_mva = X(1)/V(1); %! assert( X_gb_lower <= X_mva+tol ); %! assert( X_gb_upper >= X_mva-tol ); %! assert( Q_gb_lower <= Q+tol ); # compensate for numerical errors %! assert( Q_gb_upper >= Q-tol ); # compensate for numerical errors %! endfor %!test %! P = [0 0.3 0.7; 1 0 0; 1 0 0]; %! S = [1 0.6 0.2]; %! V = qncsvisits(P); %! Nmax = 20; %! tol = 1e-5; # compensate for numerical errors %! %! ## Test case with Z=0 %! for n=1:Nmax %! [X_gb_lower X_gb_upper NC NC Q_gb_lower Q_gb_upper] = qncsgb(n, S.*V); %! [U R Q X] = qnclosed( n, S, V ); %! X_mva = X(1)/V(1); %! assert( X_gb_lower <= X_mva+tol ); %! assert( X_gb_upper >= X_mva-tol ); %! assert( Q_gb_lower <= Q+tol ); %! assert( Q_gb_upper >= Q-tol ); %! endfor queueing/inst/qsmmm.m0000664000175000017500000001133213356117453014557 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pm}] =} qsmmm (@var{lambda}, @var{mu}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pm}] =} qsmmm (@var{lambda}, @var{mu}, @var{m}) ## ## @cindex @math{M/M/m} system ## ## Compute utilization, response time, average number of requests in ## service and throughput for a @math{M/M/m} queue, a queueing system ## with @math{m} identical servers connected to a single FCFS ## queue. ## ## @tex ## The steady-state probability @math{\pi_k} that there are @math{k} ## requests in the system, @math{k \geq 0}, can be computed as: ## ## $$ ## \pi_k = \cases{ \displaystyle{\pi_0 { ( m\rho )^k \over k!}} & $0 \leq k \leq m$;\cr ## \displaystyle{\pi_0 { \rho^k m^m \over m!}} & $k>m$.\cr ## } ## $$ ## ## where @math{\rho = \lambda/(m\mu)} is the individual server utilization. ## The steady-state probability @math{\pi_0} that there are no jobs in the ## system is: ## ## $$ ## \pi_0 = \left[ \sum_{k=0}^{m-1} { (m\rho)^k \over k! } + { (m\rho)^m \over m!} {1 \over 1-\rho} \right]^{-1} ## $$ ## ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate (@code{@var{lambda}>0}). ## ## @item @var{mu} ## Service rate (@code{@var{mu}>@var{lambda}}). ## ## @item @var{m} ## Number of servers (@code{@var{m} @geq{} 1}). ## Default is @code{@var{m}=1}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Service center utilization, @math{U = \lambda / (m \mu)}. ## ## @item @var{R} ## Service center mean response time ## ## @item @var{Q} ## Average number of requests in the system ## ## @item @var{X} ## Service center throughput. If the system is ergodic, ## we will always have @code{@var{X} = @var{lambda}} ## ## @item @var{p0} ## Steady-state probability that there are 0 requests in the system ## ## @item @var{pm} ## Steady-state probability that an arriving request has to wait in the ## queue ## ## @end table ## ## @var{lambda}, @var{mu} and @var{m} can be vectors of the same size. In this ## case, the results will be vectors as well. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks ## and Markov Chains: Modeling and Performance Evaluation with Computer ## Science Applications}, Wiley, 1998, Section 6.5 ## @end itemize ## ## @seealso{erlangc,qsmm1,qsmminf,qsmmmk} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pm] = qsmmm( lambda, mu, m ) if ( nargin < 2 || nargin > 3 ) print_usage(); endif if ( nargin == 2 ) m = 1; else ( isnumeric(lambda) && isnumeric(mu) && isnumeric(m) ) || ... error( "the parameters must be numeric vectors" ); endif [err lambda mu m] = common_size( lambda, mu, m ); if ( err ) error( "parameters are not of common size" ); endif lambda = lambda(:)'; mu = mu(:)'; m = m(:)'; all( m>0 ) || ... error( "m must be >0" ); all( lambda>0 ) || ... error( "lambda must be >0" ); X = lambda; U = rho = lambda ./ (m .* mu ); all( U < 1 ) || ... error( "Processing capacity exceeded" ); Q = p0 = pm = 0*lambda; for i=1:length(lambda) p0(i) = 1 / ( ... sumexpn( m(i)*rho(i), m(i)-1 ) + ... expn(m(i)*rho(i), m(i))/(1-rho(i)) ... ); endfor pm = erlangc(lambda ./ mu, m); Q = m .* rho .+ rho ./ (1-rho) .* pm; R = Q ./ X; endfunction %!demo %! # This is figure 6.4 on p. 220 Bolch et al. %! rho = 0.9; %! ntics = 21; %! lambda = 0.9; %! m = linspace(1,ntics,ntics); %! mu = lambda./(rho .* m); %! [U R Q X] = qsmmm(lambda, mu, m); %! qlen = X.*(R-1./mu); %! plot(m,Q,"o",qlen,"*"); %! axis([0,ntics,0,25]); %! legend("Jobs in the system","Queue Length","location","northwest"); %! legend("boxoff"); %! xlabel("Number of servers (m)"); %! title("\\lambda = 0.9, \\mu = 0.9"); queueing/inst/ctmc_exps.m0000664000175000017500000000364312762046576015427 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{t}, @var{p} ) ## @deftypefnx {Function File} {@var{L} =} ctmc_exps (@var{Q}, @var{p}) ## ## This function is deprecated. Please use @code{ctmcexps} instead. ## ## @seealso{ctmcexps} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function L = ctmc_exps( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "ctmc_exps is deprecated. Please use ctmcexps instead"); endif L = ctmcexps( varargin{:} ); endfunction %!test %! Q = [-1 1; 1 -1]; %! L = ctmc_exps(Q,10,[1 0]); %! L = ctmc_exps(Q,linspace(0,10,100),[1 0]); %!test %! Q = ctmc_bd( [1 2 3], [3 2 1] ); %! p0 = [1 0 0 0]; %! t = linspace(0,10,10); %! L1 = L2 = zeros(length(t),4); %! # compute L using the differential equation formulation %! ff = @(x,t) (x(:)'*Q+p0); %! fj = @(x,t) (Q); %! L1 = lsode( {ff, fj}, zeros(size(p0)), t ); %! # compute L using ctmc_exps (integral formulation) %! for i=1:length(t) %! L2(i,:) = ctmc_exps(Q,t(i),p0); %! endfor %! assert( L1, L2, 1e-5); queueing/inst/qnclosedsinglemvaapprox.m0000664000175000017500000000517212762046576020411 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvaapprox (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvaapprox (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvaapprox (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvaapprox (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosedsinglemvaapprox (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}, @var{iter_max}) ## ## This function is deprecated. Please use @code{qncsmvaap} instead. ## ## @seealso{qncsmvaap} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnclosedsinglemvaapprox( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnclosedsinglemvaapprox is deprecated. Please use qncsmvaap instead"); endif [U R Q X] = qncsmvaap( varargin{:} ); endfunction %!test %! fail( "qnclosedsinglemvaapprox()", "Invalid" ); %! fail( "qnclosedsinglemvaapprox( 10, [1 2], [1 2 3] )", "S, V and m" ); %! fail( "qnclosedsinglemvaapprox( 10, [-1 1], [1 1] )", ">= 0" ); %! fail( "qnclosedsinglemvaapprox( 10, [1 2], [1 2], [1 2] )", "supports"); %! fail( "qnclosedsinglemvaapprox( 10, [1 2], [1 2], [1 1], 0, -1)", "tol"); %!test %! # Example p. 117 Lazowska et al. %! S = [0.605 2.1 1.35]; %! V = [1 1 1]; %! N = 3; %! Z = 15; %! m = 1; %! [U R Q X] = qnclosedsinglemvaapprox(N, S, V, m, Z); %! Rs = dot(V,R); %! Xs = N/(Z+Rs); %! assert( Q, [0.0973 0.4021 0.2359], 1e-3 ); %! assert( Xs, 0.1510, 1e-3 ); %! assert( Rs, 4.87, 1e-3 ); queueing/inst/qsammm.m0000664000175000017500000000650713356117505014726 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qsammm (@var{lambda}, @var{mu}) ## ## @cindex asymmetric @math{M/M/m} system ## ## Compute @emph{approximate} utilization, response time, average ## number of requests in service and throughput for an asymmetric ## @math{M/M/m} queue. In this type of system there are @math{m} different ## servers connected to a single queue. Each server has its own ## (possibly different) service rate. If there is more than one server ## available, requests are routed to a randomly-chosen one. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate (@code{@var{lambda}>0}) ## ## @item @var{mu} ## @code{@var{mu}(i)} is the service rate of server ## @math{i}, @math{1 @leq{} i @leq{} m}. ## The system must be ergodic (@code{@var{lambda} < sum(@var{mu})}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Approximate service center utilization, ## @math{U = \lambda / ( \sum_i \mu_i )}. ## ## @item @var{R} ## Approximate service center response time ## ## @item @var{Q} ## Approximate number of requests in the system ## ## @item @var{X} ## Approximate system throughput. If the system is ergodic, ## @code{@var{X} = @var{lambda}} ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks ## and Markov Chains: Modeling and Performance Evaluation with Computer ## Science Applications}, Wiley, 1998 ## @end itemize ## ## @seealso{qsmmm} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0 pm] = qsammm( lambda, mu ) if ( nargin != 2 ) print_usage(); endif isscalar(lambda) || ... error( "lambda must be scalar" ); isvector(mu) || ... error( "mu must be a vector" ); m = length(mu); # number of servers all( lambda < sum(mu) ) || ... error( "Processing capacity exceeded" ); X = lambda; U = rho = lambda / sum(mu); Q = p0 = 0; #{ k=[0:m-1]; p0 = 1 / ( ... sum( (m*rho).^k ./ factorial(k)) + ... (m*rho)^m / (factorial(m)*(1-rho)) ... ); pm = (m*rho)^m/(factorial(m)*(1-rho))*p0; #} p0 = 1 / ( ... sumexpn( m*rho, m-1 ) + ... expn(m*rho, m) / (1-rho) ... ); pm = expn(m*rho, m)*p0/(1-rho); Q = m*rho+rho / (1-rho) * pm; R = Q / X; endfunction %!test %! [U R Q X] = qsammm( 73,[10,15,20,20,25] ); %! assert( U, 0.81, 1e-2 ); %! assert( Q, 6.5278, 1e-4 ); queueing/inst/private/0000775000175000017500000000000013356152316014716 5ustar morenomorenoqueueing/inst/private/scc.m0000664000175000017500000000402213320137665015643 0ustar morenomoreno## Copyright (C) 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{s} =} scc (@var{G}) ## ## Compute the Strongly Connected Components (SCC) of a graph with ## adjacency matrix @var{G}. Any positive value in @var{G} denotes ## an edge; zero or negative values denote the absence of an edge. ## ## @end deftypefn function s = scc( G ) ## FIXME: (mosty) copied from qncmvisits.m; use a better algorithm ## for SCC (e.g., ## http://pmtksupport.googlecode.com/svn/trunk/gaimc1.0-graphAlgo/scomponents.m assert(issquare(G)); N = rows(G); GF = (G>0); GB = (G'>0); s = zeros(N,1); c=1; for n=1:N if (s(n) == 0) fw = __dfs(GF,n); bw = __dfs(GB,n); r = (fw & bw); s(r) = c++; endif endfor endfunction ## FIXME: (mostly) copied from qncmvisits.m function v = __dfs(G, s) assert( issquare(G) ); N = rows(G); v = stack = zeros(1,N); ## v(i) == 1 iff node i has been visited q = 1; # first empty slot in queue stack(q++) = s; v(s) = 1; while( q>1 ) n = stack(--q); ## explore neighbors of n: all f in G(n,:) such that v(f) == 0 ## The following instruction is equivalent to: ## for f=find(G(n,:)) ## if ( v(f) == 0 ) for f = find ( G(n,:) & (v==0) ) stack(q++) = f; v(f) = 1; endfor endwhile endfunction queueing/inst/private/expn.m0000664000175000017500000000220613277106624016051 0ustar morenomoreno## Copyright (C) 2012, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{r} =} expn (@var{a}, @var{n}) ## ## Compute @code{r = a^n / n!}, with @math{a>0} and @math{n @geq{} 0}. ## ## @end deftypefn function r = expn( a, n ) n>=0 || ... error("n must be nonnegative"); a>0 || ... error("a must be positive"); r = prod( a./(1:n) ); # for n=0, prod([]) returns 1 which is correct endfunction queueing/inst/private/qnoschkparam.m0000664000175000017500000000437512762046576017606 0ustar morenomoreno## Copyright (C) 2012, 2013, 2014 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{err} @var{lambda} @var{S} @var{V} @var{m}] = } qnoschkparam( lambda, S, V, m ) ## ## Validate input parameters for open, single class networks. ## @var{err} is the empty string on success, or a suitable error message ## string on failure. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [err lambda S V m] = qnoschkparam( varargin ) err = ""; assert( nargin >= 2 ); lambda = varargin{1}; S = varargin{2}; [V m] = deal(0); if ! ( isscalar(lambda) && lambda > 0 ) err = "lambda must be a positive scalar"; return; endif if ! ( isnumeric(S) && isvector(S) && length(S)>0 ) err = "S must be a nonempty vector"; return; endif if ( any(S<0) ) err = "S must contain nonnegative values"; return; endif S = S(:)'; if ( nargin < 3 ) V = ones(size(S)); else V = varargin{3}; if ! ( isnumeric(V) && isvector(V) ) err = "V must be a vector"; return; endif if ( any(V<0) ) err = "V must contain nonnegative values"; return; endif V = V(:)'; endif if ( nargin < 4 ) m = ones(size(S)); else m = varargin{4}; if ! ( isnumeric(m) && isvector(m) ) err = "m must be a vector"; return; endif m = m(:)'; endif [er S V m] = common_size(S, V, m); if (er != 0 ) err = "S, V and m are of incompatible size"; return; endif endfunction queueing/inst/private/qncmchkparam.m0000664000175000017500000000634212762046576017560 0ustar morenomoreno## Copyright (C) 2012, 2013 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{err} @var{Nout} @var{Sout} @var{Vout} @var{mout} @var{Zout}] = } qncmchkparam( N, S ) ## @deftypefnx {Function File} {[@var{err} @var{Nout} @var{Sout} @var{Vout} @var{mout} @var{Zout}] = } qncmchkparam( N, S, V ) ## @deftypefnx {Function File} {[@var{err} @var{Nout} @var{Sout} @var{Vout} @var{mout} @var{Zout}] = } qncmchkparam( N, S, V, m ) ## @deftypefnx {Function File} {[@var{err} @var{Nout} @var{Sout} @var{Vout} @var{mout} @var{Zout}] = } qncmchkparam( N, S, V, m, Z ) ## ## Validate input parameters for closed, multiclass network. ## @var{err} is the empty string on success, or a suitable error message ## string on failure. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [err Nout Sout Vout mout Zout] = qncmchkparam( N, S, V, m, Z ) err = ""; [Nout Sout Vout mout Zout] = deal(0); if ( nargin < 2 || nargin > 5 ) err = "Wrong number of parameters (min 2, max 5)"; return; endif if ! ( isnumeric(N) && isvector(N) && length(N)>0 ) err = "N must be a nonempty vector"; return; endif if ! ( all(N>=0) && all( fix(N) == N ) ) err = "N must contain nonnegative integers"; return; endif Nout = N(:)'; C = length(Nout); ## Number of classes if ! ( isnumeric(S) && ismatrix(S) && ndims(S) == 2 && rows(S) == C ) err = sprintf("S must be a 2-dimensional matrix with %d rows",C); return; endif if ( any(S(:)<0) ) err = "S must contain nonnegative values"; return; endif Sout = S; K = columns(Sout); if ( nargin < 3 ) Vout = ones(size(Sout)); else if ! ( isnumeric(V) && ismatrix(V) && ndims(V) == 2 && rows(V) == C && columns(V) == K ) err = sprintf("V must be a %d x %d matrix", C, K ); return; endif if ( any(V(:)<0) ) err = "V must contain nonnegative values"; return; endif Vout = V; endif if ( nargin < 4 ) mout = ones(1,K); else if ! ( isnumeric(m) && isvector(m) && length(m) == K ) err = sprintf("m must be a vector with %d elements", K ); return; endif mout = m(:)'; endif if ( nargin < 5 ) Zout = zeros(1,C); else if ! ( isnumeric(Z) && isvector(Z) && length(Z) == C ) err = sprintf("Z must be a vector with %d elements", C); return; endif if ( any(Z<0) ) err = "Z must contain nonnegative values"; return; endif Zout = Z(:)'; endif endfunction queueing/inst/private/sumexpn.m0000664000175000017500000000377513334570401016602 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{r} =} sumexpn (@var{a}, @var{n}) ## ## Compute the sum: ## ## @iftex ## @tex ## $$ S(a,n) = \sum_{k=0}^n {a^k \over k!} $$ ## @end tex ## @end iftex ## @ifnottex ## @example ## n ## __ ## \ a^k ## S(a,n) = > ----- ## /__ k! ## k=0 ## @end example ## @end ifnottex ## ## with @math{a>0} and @math{n @geq{} 0}. ## ## @end deftypefn function r = sumexpn( a, n ) n>=0 || ... error("n must be nonnegative"); a>0 || ... error("a must be positive"); r = sum(cumprod([1 a./(1:n)])); #{ We can rewrite a^0 a^1 a^2 a^n --- + --- + --- + ... + --- 0! 1! 2! n! as a / a / a / / a \ \\\ 1 + - | 1 + - | 1 + - | 1 + ... | 1 + - | ... ||| 1 \ 2 \ 3 \ \ n / /// from which we can use the following iterative code: r = 1; for k=n:-1:1 r = (1+(a/k)*r); endfor TODO: The numerical stability of both approaches should be investigated. #} endfunction %!test %! a = 0.8; %! n = 0; %! assert( sumexpn(a,n), sum(a.^(0:n) ./ factorial(0:n)), 1e-6 ); %!test %! a = 1.2; %! n = 6; %! assert( sumexpn(a,n), sum(a.^(0:n) ./ factorial(0:n)), 1e-6 ); queueing/inst/private/qncschkparam.m0000664000175000017500000000501512762046576017562 0ustar morenomoreno## Copyright (C) 2012, 2013, 2014 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{err} @var{Nout} @var{Sout} @var{Vout} @var{mout} @var{Zout}] = } qncschkparam( N, S, V, m, Z ) ## ## Validate input parameters for closed, single class networks. ## @var{err} is the empty string on success, or a suitable error message ## string on failure. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [err Nout Sout Vout mout Zout] = qncschkparam( N, S, V, m, Z ) err = ""; [Nout Sout Vout mout Zout] = deal(0); if ( nargin < 2 || nargin > 5) err = "Wrong number of parameters (min 2, max 5)"; return; endif if ! ( isscalar(N) && N>=0 && N == fix(N) ) err = "N must be a nonnegative integer"; return; endif Nout = N; if ! ( isnumeric(S) && isvector(S) && length(S)>0 ) err = "S must be a nonempty vector"; return; endif if ( any(S<0) ) err = "S must contain nonnegative values"; return; endif Sout = S(:)'; if ( nargin < 3 ) Vout = ones(size(Sout)); else if ! ( isnumeric(V) && isvector(V) ) err = "V must be a vector"; return; endif if ( any(V<0) ) err = "V must contain nonnegative values"; return; endif Vout = V(:)'; endif if ( nargin < 4 ) mout = ones(size(Sout)); else if ! ( isnumeric(V) && isvector(m) ) err = "m must be a vector"; return; endif mout = m(:)'; endif [er Sout Vout mout] = common_size(Sout, Vout, mout); if (er != 0 ) err = "S, V and m are of incompatible size"; return; endif if ( nargin < 5 ) Zout = 0; else if ! ( isscalar(Z) && Z >= 0 ) err = "Z must be a nonnegative scalar"; return; endif Zout = Z; endif endfunction queueing/inst/private/qnomchkparam.m0000664000175000017500000000474112762046576017575 0ustar morenomoreno## Copyright (C) 2012, 2013, 2014 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{err} @var{lambda} @var{S} @var{V} @var{m} @var{Z}] = } qnomchkparam( lambda, S, ... ) ## ## Validate input parameters for open, multiclass network. ## @var{err} is the empty string on success, or a suitable error message ## string on failure. ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [err lambda S V m] = qnomchkparam( varargin ) err = ""; assert( nargin >= 2 ); lambda = varargin{1}; S = varargin{2}; [V m] = deal(0); if ! ( isnumeric(lambda) && isvector(lambda) && length(lambda)>0 ) err = "lambda must be a nonempty vector"; return; endif if ( any(lambda<0) ) err = "lambda must contain nonnegative values"; return; endif lambda = lambda(:)'; C = length(lambda); ## Number of classes if ! ( isnumeric(S) && ismatrix(S) && ndims(S) == 2 && rows(S) == C ) err = sprintf("S must be a 2-dimensional matrix with %d rows",C); return; endif if ( any(S(:)<0) ) err = "S must contain nonnegative values"; return; endif K = columns(S); if ( nargin < 3 ) V = ones(size(S)); else V = varargin{3}; if ! ( isnumeric(V) && ismatrix(V) & ndims(V) == 2 & rows(V) == C & columns(V) == K ) err = sprintf("V must be a %d x %d matrix", C, K ); return; endif if ( any(V(:)<0) ) err = "V must contain nonnegative values"; return; endif endif if ( nargin < 4 ) m = ones(1,K); else m = varargin{4}; if ! ( isnumeric(m) && isvector(m) && length(m) == K ) err = sprintf("m must be a vector with %d elements", K ); return; endif m = m(:)'; endif endfunction queueing/inst/qnmvablo.m0000664000175000017500000000541112762046576015254 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmvablo (@var{N}, @var{S}, @var{M}, @var{P}) ## ## This function is deprecated. Please use @code{qncsmvablo} instead. ## ## @seealso{qncsmvablo} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qnmvablo( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmvablo is deprecated. Please use qncsmvablo instead"); endif [U R Q X] = qncsmvablo( varargin{:} ); endfunction %!test %! fail( "qnmvablo( 10, [1 1], [4 5], [0 1; 1 0] )", "capacity"); %! fail( "qnmvablo( 6, [1 1], [4 5], [0 1; 1 1] )", "stochastic"); %! fail( "qnmvablo( 5, [1 1 1], [1 1], [0 1; 1 1] )", "3 elements"); %!test %! # This is the example on section v) p. 422 of the reference paper %! M = [12 10 14]; %! P = [0 1 0; 0 0 1; 1 0 0]; %! S = [1/1 1/2 1/3]; %! K = 27; %! [U R Q X]=qnmvablo( K, S, M, P ); %! assert( R, [11.80 1.66 14.4], 1e-2 ); %!test %! # This is example 2, i) and ii) p. 424 of the reference paper %! M = [4 5 5]; %! S = [1.5 2 1]; %! P = [0 1 0; 0 0 1; 1 0 0]; %! K = 10; %! [U R Q X]=qnmvablo( K, S, M, P ); %! assert( R, [6.925 8.061 4.185], 1e-3 ); %! K = 12; %! [U R Q X]=qnmvablo( K, S, M, P ); %! assert( R, [7.967 9.019 8.011], 1e-3 ); %!test %! # This is example 3, i) and ii) p. 424 of the reference paper %! M = [8 7 6]; %! S = [0.2 1.2 1.4]; %! P = [ 0 0.5 0.5; 1 0 0; 1 0 0 ]; %! K = 10; %! [U R Q X] = qnmvablo( K, S, M, P ); %! assert( R, [1.674 5.007 7.639], 1e-3 ); %! K = 12; %! [U R Q X] = qnmvablo( K, S, M, P ); %! assert( R, [2.166 5.372 6.567], 1e-3 ); %!test %! # Network which never blocks, central server model %! M = [50 50 50]; %! S = [1 1/0.8 1/0.4]; %! P = [0 0.7 0.3; 1 0 0; 1 0 0]; %! K = 40; %! [U1 R1 Q1] = qnmvablo( K, S, M, P ); %! V = qncsvisits(P); %! [U2 R2 Q2] = qnclosedsinglemva( K, S, V ); %! assert( U1, U2, 1e-5 ); %! assert( R1, R2, 1e-5 ); %! assert( Q1, Q2, 1e-5 ); queueing/inst/qncmmvaap.m0000664000175000017500000002144013356122461015404 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}) ## @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}, @var{iter_max}) ## ## @cindex Mean Value Analysys (MVA), approximate ## @cindex MVA, approximate ## @cindex closed network, multiple classes ## @cindex multiclass network, closed ## ## Approximate Mean Value Analysis (MVA) for closed, multiclass ## queueing networks with @math{K} service centers and @math{C} ## customer classes. ## ## This implementation uses Bard and Schweitzer approximation. It is based ## on the assumption that ## @tex ## $$Q_i({\bf N}-{\bf 1}_c) \approx {n-1 \over n} Q_i({\bf N})$$ ## @end tex ## @ifnottex ## the queue length at service center @math{k} with population ## set @math{{\bf N}-{\bf 1}_c} is approximately equal to the queue length ## with population set @math{\bf N}, times @math{(n-1)/n}: ## ## @example ## @group ## Q_i(N-1c) ~ (n-1)/n Q_i(N) ## @end group ## @end example ## @end ifnottex ## ## where @math{\bf N} is a valid population mix, @math{{\bf N}-{\bf 1}_c} ## is the population mix @math{\bf N} with one class @math{c} customer ## removed, and @math{n = \sum_c N_c} is the total number of requests. ## ## This implementation works for networks with infinite server (IS) ## and single-server nodes only. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N}(c) ## number of class @math{c} requests in the system (@code{@var{N}(c) @geq{} 0}). ## ## @item @var{S}(c,k) ## mean service time for class @math{c} customers at center @math{k} ## (@code{@var{S}(c,k) @geq{} 0}). ## ## @item @var{V}(c,k) ## average number of visits of class @math{c} requests to center ## @math{k} (@code{@var{V}(c,k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k}. If @code{@var{m}(k) < 1}, ## then the service center @math{k} is assumed to be a delay center ## (IS). If @code{@var{m}(k) == 1}, service center @math{k} is a ## regular queueing center (FCFS, LCFS-PR or PS) with a single server ## node. If omitted, each service center has a single server. Note ## that multiple server nodes are not supported. ## ## @item @var{Z}(c) ## class @math{c} external delay (@code{@var{Z} @geq{} 0}). Default is 0. ## ## @item @var{tol} ## Stopping tolerance (@code{@var{tol}>0}). The algorithm stops if ## the queue length computed on two subsequent iterations are less than ## @var{tol}. Default is @math{10^{-5}}. ## ## @item @var{iter_max} ## Maximum number of iterations (@code{@var{iter_max}>0}. ## The function aborts if convergenge is not reached within the maximum ## number of iterations. Default is 100. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U}(c,k) ## If @math{k} is a FCFS, LCFS-PR or PS node, then @code{@var{U}(c,k)} ## is the utilization of class @math{c} requests on service center ## @math{k}. If @math{k} is an IS node, then @code{@var{U}(c,k)} is the ## class @math{c} @emph{traffic intensity} at device @math{k}, ## defined as @code{@var{U}(c,k) = @var{X}(c)*@var{S}(c,k)} ## ## @item @var{R}(c,k) ## response time of class @math{c} requests at service center @math{k}. ## ## @item @var{Q}(c,k) ## average number of class @math{c} requests at service center @math{k}. ## ## @item @var{X}(c,k) ## class @math{c} throughput at service center @math{k}. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Y. Bard, @cite{Some Extensions to Multiclass Queueing Network Analysis}, ## proc. 4th Int. Symp. on Modelling and Performance Evaluation of ## Computer Systems, Feb 1979, pp. 51--62. ## ## @item ## P. Schweitzer, @cite{Approximate Analysis of Multiclass Closed ## Networks of Queues}, Proc. Int. Conf. on Stochastic Control and ## Optimization, jun 1979, pp. 25--29. ## @end itemize ## ## This implementation is based on Edward D. Lazowska, John Zahorjan, G. ## Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System ## Performance: Computer System Analysis Using Queueing Network Models}, ## Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 7.4.2.2 ("Approximate Solution ## Techniques"). This implementation is slightly different from the one ## described above, as it computes the average response times @math{R} ## instead of the residence times. ## ## @seealso{qncmmva} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X] = qncmmvaap( N, S, V, m, Z, tol, iter_max ) if ( nargin < 3 || nargin > 7 ) print_usage(); endif isvector(N) && all( N>=0 ) || ... error( "N must be a vector of positive integers" ); N = N(:)'; # make N a row vector C = length(N); ## Number of classes K = columns(S); ## Number of service centers size(S) == [C,K] || ... error( "S size mismatch" ); size(V) == [C,K] || ... error( "V size mismatch" ); if ( nargin < 4 || isempty(m) ) m = ones(1,K); else isvector(m) || ... error( "m must be a vector"); m = m(:)'; # make m a row vector ( length(m) == K && all( m <= 1 ) ) || ... error( "m must be <= 1 and have %d elements", K ); endif if ( nargin < 5 || isempty(Z) ) Z = zeros(1,C); else isvector(Z) || ... error( "Z must be a vector" ); Z = Z(:)'; # make Z a row vector ( length(Z) == C && all(Z >= 0 ) ) || ... error( "Z must be >= 0 and have %d elements", C ); endif if ( nargin < 6 || isempty(tol) ) tol = 1e-5; endif if ( nargin < 7 || isempty(iter_max) ) iter_max = 100; endif ## Check consistency of parameters all(S(:) >= 0) || ... error( "S contains negative values" ); all(V(:) >= 0) || ... error( "V contains negative values" ); ## Initialize results R = zeros( C, K ); Xc = zeros( 1, C ); # Xc(c) is the class c throughput Q = zeros( C, K ); D = V .* S; ## Initialization of temporaries iter = 0; A = zeros( C, K ); Q = diag(N/K)*ones(C,K); # Q(c,k) = N(c) / K i_single=find(m==1); i_multi=find(m<1); ## Main loop N(N==0)=1; do iter++; Qold = Q; ## A(c,k) = (N(c)-1)/N(c) * Q(c,k) + sum_{j=1, j|=c}^C Qold(j,k) A = diag( (N-1) ./ N )*Q + ( (1 - eye(C)) * Qold ); ## R(c,k) = ## S(c,k) is k is a delay center ## S(c,k) * (1+A(c,k)) if k is a queueing center; R(:,i_multi) = S(:,i_multi); R(:,i_single) = S(:,i_single) .* ( 1 + A(:,i_single)); ## X(c) = N(c) / (sum_k R(c,k) * V(c,k)) Xc = N ./ (Z .+ sum(R.*V,2)'); ## Q(c,k) = X(c) * R(c,k) * V(c,k) Q = (diag(Xc)*R).*V; ## err = norm(Q-Qold); err = norm((Q-Qold)./Qold, "inf"); until (erriter_max); if ( iter > iter_max ) warning( "qncmmvaap(): Convergence not reached after %d iterations", iter_max ); endif X = diag(Xc)*V; # X(c,k) = X(c) * V(c,k) U = diag(Xc)*D; # U(c,k) = X(c) * D(c,k) # U(N==0,:) = R(N==0,:) = Q(N==0,:) = X(N==0,:) = 0; endfunction %!test %! S = [ 1 3 3; 2 4 3]; %! V = [ 1 1 3; 1 1 3]; %! N = [ 1 1 ]; %! m = [1 ; 1 ]; %! Z = [2 2 2]; %! fail( "qncmmvaap(N,S,V,m,Z)", "m must be" ); %! m = [1 ; 1 ; 1]; %! fail( "qncmmvaap(N,S,V,m,Z)", "Z must be" ); %!test %! S = [ 1 3; 2 4]; %! V = [ 1 1; 1 1]; %! N = [ 1 1 ]; %! m = ones(1,2); %! [U R Q X] = qncmmvaap(N,S,V,m); %! assert( Q, [ .192 .808; .248 .752 ], 1e-3 ); %! Xc = ( X(:,1)./V(:,1) )'; %! assert( Xc, [ .154 .104 ], 1e-3 ); %! # Compute the (overall) class-c system response time %! R_c = N ./ Xc; %! assert( R_c, [ 6.508 9.614 ], 5e-3 ); %!demo %! S = [ 1, 1, 1, 1; 2, 1, 3, 1; 4, 2, 3, 3 ]; %! V = ones(3,4); %! N = [10 5 1]; %! m = [1 0 1 1]; %! [U R Q X] = qncmmvaap(N,S,V,m); queueing/inst/qnmg1.m0000664000175000017500000000250312762046576014457 0ustar morenomoreno## Copyright (C) 2009 Dmitry Kolesnikov ## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qnmg1 (@var{lambda}, @var{xavg}, @var{x2nd}) ## ## This function is deprecated. Please use @code{qsmg1} instead. ## ## @seealso{qsmg1} ## ## @end deftypefn ## Author: Dmitry Kolesnikov function [U R Q X p0] = qnmg1( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "qnmg1 is deprecated. Please use qsmg1 instead"); endif [U R Q X p0] = qsmg1( varargin{:} ); endfunction queueing/inst/qnosvisits.m0000664000175000017500000000563712762303027015654 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{V} =} qnosvisits (@var{P}, @var{lambda}) ## ## Compute the average number of visits to the service centers of a single ## class open Queueing Network with @math{K} service centers. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## is the probability that a request which completed service at center ## @math{i} is routed to center @math{j} (@math{K \times K} matrix). ## ## @item @var{lambda}(k) ## external arrival rate to center @math{k}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{V}(k) ## average number of visits to server @math{k}. ## ## @end table ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function V = qnosvisits( P, lambda ) if ( nargin != 2 ) print_usage(); endif issquare(P) || ... error("P must be a square matrix"); K = rows(P); all(P(:)>=0) && all( sum(P,2)<=1+1e-5 ) || ... error( "invalid transition probability matrix P" ); ( isvector(lambda) && length(lambda) == K ) || ... error( "lambda must be a vector with %d elements", K ); all( lambda>= 0 ) || ... error( "lambda contains negative values" ); lambda = lambda(:)'; V = zeros(size(P)); A = eye(K)-P; b = lambda / sum(lambda); V = b/A; ## Make sure that no negative values appear (sometimes, numerical ## errors produce tiny negative values instead of zeros) V = max(0,V); endfunction %!test %! fail( "qnosvisits([0 .5; .5 0],[0 -1])", "contains negative" ); %! fail( "qnosvisits([1 1 1; 1 1 1], [1 1])", "square" ); %!test %! %! ## Open, single class network %! %! P = [0 0.2 0.5; 1 0 0; 1 0 0]; %! lambda = [ 0.1 0.3 0.2 ]; %! V = qnosvisits(P,lambda); %! assert( V*P+lambda/sum(lambda),V,1e-5 ); %!demo %! p = 0.3; %! lambda = 1.2 %! P = [0 0.3 0.5; ... %! 1 0 0 ; ... %! 1 0 0 ]; %! V = qnosvisits(P,[1.2 0 0]) %!demo %! P = [ 0 0.4 0.6 0; ... %! 0.2 0 0.2 0.6; ... %! 0 0 0 1; ... %! 0 0 0 0 ]; %! lambda = [0.1 0 0 0.3]; %! V = qnosvisits(P,lambda); %! S = [2 1 2 1.8]; %! m = [3 1 1 2]; %! [U R Q X] = qnos( sum(lambda), S, V, m ) queueing/inst/qnclosedpb.m0000664000175000017500000000276112762046576015574 0ustar morenomoreno## Copyright (C) 2012 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnclosedpb (@var{N}, @var{D} ) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnclosedpb (@var{N}, @var{D}, @var{Z} ) ## ## This function is deprecated. Please use @code{qncspb} instead. ## ## @seealso{qncspb} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [X_lower X_upper] = qnclosedpb( varargin ) persistent warned = false; if (!warned) warned = true; warning("qn:deprecated-function", "Function qnclosedpb is deprecated. Please use qncspb instead"); endif [X_lower X_upper R_lower R_upper] = qncspb( varargin{:} ); endfunction queueing/inst/dtmcfpt.m0000664000175000017500000001021713356110413015054 0ustar morenomoreno## Copyright (C) 2011, 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {@var{M} =} dtmcfpt (@var{P}) ## ## @cindex first passage times ## @cindex mean recurrence times ## @cindex discrete time Markov chain ## @cindex Markov chain, discrete time ## @cindex DTMC ## ## Compute mean first passage times and mean recurrence times ## for an irreducible discrete-time Markov chain over the state space ## @math{@{1, @dots{}, N@}}. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{P}(i,j) ## transition probability from state @math{i} to state @math{j}. ## @var{P} must be an irreducible stochastic matrix, which means that ## the sum of each row must be 1 (@math{\sum_{j=1}^N P_{i j} = 1}), ## and the rank of @var{P} must be @math{N}. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{M}(i,j) ## For all @math{1 @leq{} i, j @leq{} N}, @math{i \neq j}, @code{@var{M}(i,j)} is ## the average number of transitions before state @var{j} is entered ## for the first time, starting from state @var{i}. ## @code{@var{M}(i,i)} is the @emph{mean recurrence time} of state ## @math{i}, and represents the average time needed to return to state ## @var{i}. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item Grinstead, Charles M.; Snell, J. Laurie (July ## 1997). @cite{Introduction to Probability}, Ch. 11: Markov ## Chains. American Mathematical Society. ISBN 978-0821807491. ## @end itemize ## ## @seealso{ctmcfpt} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function result = dtmcfpt( P ) if ( nargin != 1 ) print_usage(); endif [N err] = dtmcchkP(P); ( N>0 ) || ... error(err); if ( any(diag(P) == 1) ) error("Cannot compute first passage times for absorbing chains"); endif w = dtmc(P); # steady state probability vector W = repmat(w,N,1); ## Z = (I - P + W)^-1 where W is the matrix where each row is the ## steady-state probability vector for P Z = inv(eye(N)-P+W); ## m_ij = (z_jj - z_ij) / w_j result = (repmat(diag(Z)',N,1) - Z) ./ repmat(w,N,1) + diag(1./w); endfunction %!test %! P = [1 1 1; 1 1 1]; %! fail( "dtmcfpt(P)" ); %!test %! P = dtmcbd([1 1 1], [0 0 0] ); %! fail( "dtmcfpt(P)", "absorbing" ); %!test %! P = [ 0.0 0.9 0.1; ... %! 0.1 0.0 0.9; ... %! 0.9 0.1 0.0 ]; %! p = dtmc(P); %! M = dtmcfpt(P); %! assert( diag(M)', 1./p, 1e-8 ); ## Example on p. 461 of [GrSn97] %!test %! P = [ 0 1 0 0 0; ... %! .25 .0 .75 0 0; ... %! 0 .5 0 .5 0; ... %! 0 0 .75 0 .25; ... %! 0 0 0 1 0 ]; %! M = dtmcfpt(P); %! assert( M, [16 1 2.6667 6.3333 21.3333; ... %! 15 4 1.6667 5.3333 20.3333; ... %! 18.6667 3.6667 2.6667 3.6667 18.6667; ... %! 20.3333 5.3333 1.6667 4 15; ... %! 21.3333 6.3333 2.6667 1 16 ], 1e-4 ); %!test %! sz = 10; %! P = reshape( 1:sz^2, sz, sz ); %! normP = repmat(sum(P,2),1,columns(P)); %! P = P./normP; %! M = dtmcfpt(P); %! for i=1:rows(P) %! for j=1:columns(P) %! assert( M(i,j), 1 + dot(P(i,:), M(:,j)) - P(i,j)*M(j,j), 1e-8); %! endfor %! endfor ## "Rat maze" problem (p. 453 of [GrSn97]); %!test %! P = zeros(9,9); %! P(1,[2 4]) = .5; %! P(2,[1 5 3]) = 1/3; %! P(3,[2 6]) = .5; %! P(4,[1 5 7]) = 1/3; %! P(5,[2 4 6 8]) = 1/4; %! P(6,[3 5 9]) = 1/3; %! P(7,[4 8]) = .5; %! P(8,[7 5 9]) = 1/3; %! P(9,[6 8]) = .5; %! M = dtmcfpt(P); %! assert( M(1:9 != 5,5)', [6 5 6 5 5 6 5 6], 100*eps ); queueing/inst/qncmaba.m0000664000175000017500000001411013356134502015016 0ustar morenomoreno## Copyright (C) 2012, 2016, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{D}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{S}, @var{V}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{S}, @var{V}, @var{m}) ## @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) ## ## @cindex bounds, asymptotic ## @cindex asymptotic bounds ## @cindex closed network ## @cindex multiclass network, closed ## @cindex closed multiclass network ## ## Compute Asymptotic Bounds for closed, multiclass networks ## with @math{K} service centers and @math{C} customer classes. ## Single-server and infinite-server nodes are supported. ## Multiple-server nodes and general load-dependent servers are not ## supported. ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{N}(c) ## number of class @math{c} requests in the system ## (vector of length @math{C}, @code{@var{N}(c) @geq{} 0}). ## ## @item @var{D}(c, k) ## class @math{c} service demand ## at center @math{k} (@math{C \times K} matrix, @code{@var{D}(c,k) @geq{} 0}). ## ## @item @var{S}(c, k) ## mean service time of class @math{c} ## requests at center @math{k} (@math{C \times K} matrix, @code{@var{S}(c,k) @geq{} 0}). ## ## @item @var{V}(c,k) ## average number of visits of class @math{c} ## requests to center @math{k} (@math{C \times K} matrix, @code{@var{V}(c,k) @geq{} 0}). ## ## @item @var{m}(k) ## number of servers at center @math{k} ## (if @var{m} is a scalar, all centers have that number of servers). If ## @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); ## if @code{@var{m}(k) = 1}, center @math{k} is a M/M/1-FCFS server. ## This function does not support multiple-server nodes. Default ## is 1. ## ## @item @var{Z}(c) ## class @math{c} external delay ## (vector of length @math{C}, @code{@var{Z}(c) @geq{} 0}). Default is 0. ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{Xl}(c) ## @itemx @var{Xu}(c) ## Lower and upper bounds for class @math{c} throughput. ## ## @item @var{Rl}(c) ## @itemx @var{Ru}(c) ## Lower and upper bounds for class @math{c} response time. ## ## @end table ## ## @strong{REFERENCES} ## ## @itemize ## @item ## Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth ## C. Sevcik, @cite{Quantitative System Performance: Computer System ## Analysis Using Queueing Network Models}, Prentice Hall, ## 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In ## particular, see section 5.2 ("Asymptotic Bounds"). ## @end itemize ## ## @seealso{qncsaba} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [Xl Xu Rl Ru] = qncmaba( varargin ) if ( nargin<2 || nargin>5 ) print_usage(); endif [err N S V m Z] = qncmchkparam( varargin{:} ); isempty(err) || error(err); all(m<=1) || ... error("Multiple-server nodes are not supported"); if ( sum(N) == 0 ) # handle trivial case of empty network Xl = Xu = Rl = Ru = zeros(size(S)); else D = S .* V; Dc_single = sum(D(:,(m==1)),2)'; # class c demand on single-server nodes Dc_delay = sum(D(:,(m<1)),2)'; # class c demand on delay centers Dc = sum(D,2)'; # class c total demand Dcmax = max(D,[],2)'; # maximum class c demand at any server Xl = N ./ ( dot(N,Dc_single) .+ Dc_delay .+ Z); Xu = min( 1./Dcmax, N ./ (Dc .+ Z) ); Rl = N ./ Xu .- Z; Ru = N ./ Xl .- Z; endif endfunction %!test %! fail("qncmaba([],[])", "nonempty"); %! fail("qncmaba([1 0], [1 2 3])", "2 rows"); %! fail("qncmaba([1 0], [1 2 3; 4 5 -1])", "nonnegative"); %! fail("qncmaba([1 2], [1 2 3; 4 5 6], [1 2 3])", "2 x 3"); %! fail("qncmaba([1 2], [1 2 3; 4 5 6], [1 2 3; 4 5 -1])", "nonnegative"); %! fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1])", "3 elements"); %! fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 2])", "not supported"); %! fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 2 3])", "2 elements"); %! fail("qncmaba([1 2], [1 2 3; 1 2 3], [1 2 3; 1 2 3], [1 1 -1],[1 -2])", "nonnegative"); %!test %! [Xl Xu Rl Ru] = qncmaba([0 0], [1 2 3; 1 2 3]); %! assert( all(Xl(:) == 0) ); %! assert( all(Xu(:) == 0) ); %! assert( all(Rl(:) == 0) ); %! assert( all(Ru(:) == 0) ); %!demo %! S = [10 7 5 4; ... %! 5 2 4 6]; %! NN=20; %! Xl = Xu = Rl = Ru = Xmva = Rmva = zeros(NN,2); %! for n=1:NN %! N=[n,10]; %! [a b c d] = qncmaba(N,S); %! Xl(n,:) = a; Xu(n,:) = b; Rl(n,:) = c; Ru(n,:) = d; %! [U R Q X] = qncmmva(N,S,ones(size(S))); %! Xmva(n,:) = X(:,1)'; Rmva(n,:) = sum(R,2)'; %! endfor %! subplot(2,2,1); %! plot(1:NN,Xl(:,1), 1:NN,Xu(:,1), 1:NN,Xmva(:,1), ";MVA;", "linewidth", 2); %! title("Class 1 throughput"); legend("boxoff"); %! subplot(2,2,2); %! plot(1:NN,Xl(:,2), 1:NN,Xu(:,2), 1:NN,Xmva(:,2), ";MVA;", "linewidth", 2); %! title("Class 2 throughput"); legend("boxoff"); %! subplot(2,2,3); %! plot(1:NN,Rl(:,1), 1:NN,Ru(:,1), 1:NN,Rmva(:,1), ";MVA;", "linewidth", 2); %! title("Class 1 response time"); legend("location", "northwest"); legend("boxoff"); %! subplot(2,2,4); %! plot(1:NN,Rl(:,2), 1:NN,Ru(:,2), 1:NN,Rmva(:,2), ";MVA;", "linewidth", 2); %! title("Class 2 response time"); legend("location", "northwest"); legend("boxoff"); queueing/inst/qsmminf.m0000664000175000017500000000676613356113504015107 0ustar morenomoreno## Copyright (C) 2008, 2009, 2010, 2011, 2012, 2018 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see . ## -*- texinfo -*- ## ## @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmminf (@var{lambda}, @var{mu}) ## ## Compute utilization, response time, average number of requests and throughput for a @math{M/M/\infty} queue. ## ## The @math{M/M/\infty} system has an infinite number of identical ## servers; this kind of system is always stable for every arrival and ## service rates. ## ## @cindex @math{M/M/}inf system ## ## @tex ## The steady-state probability @math{\pi_k} that there are @math{k} ## requests in the system, @math{k @geq{} 0}, can be computed as: ## ## $$ ## \pi_k = {1 \over k!} \left( \lambda \over \mu \right)^k e^{-\lambda / \mu} ## $$ ## @end tex ## ## @strong{INPUTS} ## ## @table @code ## ## @item @var{lambda} ## Arrival rate (@code{@var{lambda}>0}). ## ## @item @var{mu} ## Service rate (@code{@var{mu}>0}). ## ## @end table ## ## @strong{OUTPUTS} ## ## @table @code ## ## @item @var{U} ## Traffic intensity (defined as @math{\lambda/\mu}). Note that this is ## different from the utilization, which in the case of @math{M/M/\infty} ## centers is always zero. ## ## @cindex traffic intensity ## ## @item @var{R} ## Service center response time. ## ## @item @var{Q} ## Average number of requests in the system (which is equal to the ## traffic intensity @math{\lambda/\mu}). ## ## @item @var{X} ## Throughput (which is always equal to @code{@var{X} = @var{lambda}}). ## ## @item @var{p0} ## Steady-state probability that there are no requests in the system ## ## @end table ## ## @var{lambda} and @var{mu} can be vectors of the same size. In this ## case, the results will be vectors as well. ## ## @strong{REFERENCES} ## ## @itemize ## @item ## G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks ## and Markov Chains: Modeling and Performance Evaluation with Computer ## Science Applications}, Wiley, 1998, Section 6.4 ## @end itemize ## ## @seealso{qsmm1,qsmmm,qsmmmk} ## ## @end deftypefn ## Author: Moreno Marzolla ## Web: http://www.moreno.marzolla.name/ function [U R Q X p0] = qsmminf( lambda, mu ) if ( nargin != 2 ) print_usage(); endif ( isvector(lambda) && isvector(mu) ) || ... error( "lambda and mu must be vectors" ); [ err lambda mu ] = common_size( lambda, mu ); if ( err ) error( "Parameters are of incompatible size" ); endif lambda = lambda(:)'; mu = mu(:)'; ( all( lambda>0 ) && all( mu>0 ) ) || ... error( "lambda and mu must be >0" ); U = Q = lambda ./ mu; # Traffic intensity. p0 = exp(-lambda./mu); # probability that there are 0 requests in the system R = 1 ./ mu; X = lambda; endfunction %!test %! fail( "qsmminf( [1 2], [1 2 3] )", "incompatible size"); %! fail( "qsmminf( [-1 -1], [1 1] )", ">0" ); queueing/CITATION0000664000175000017500000000234112762046576013436 0ustar morenomorenoTo cite the Octave queueing package use: Moreno Marzolla, The qnetworks Toolbox: A Software Package for Queueing Networks Analysis. Khalid Al-Begain, Dieter Fiems and William J. Knottenbelt, Editors, Proceedings 17th International Conference on Analytical and Stochastic Modeling Techniques and Applications (ASMTA 2010) Cardiff, UK, June 14--16, 2010, volume 6148 of Lecture Notes in Computer Science, Springer, pp. 102--116, ISBN 978-3-642-13567-5, DOI 10.1007/978-3-642-13568-2_8 A BibTeX entry for LaTeX users is: @inproceedings{queueing, author = {Moreno Marzolla}, title = {The qnetworks Toolbox: A Software Package for Queueing Networks Analysis}, booktitle = {Analytical and Stochastic Modeling Techniques and Applications, 17th International Conference, ASMTA 2010, Cardiff, UK, June 14--16, 2010. Proceedings}, editor = {Khalid Al-Begain and Dieter Fiems and William J. Knottenbelt}, year = {2010}, publisher = {Springer}, series = {Lecture Notes in Computer Science}, volume = {6148}, pages = {102--116}, ee = {http://dx.doi.org/10.1007/978-3-642-13568-2_8}, doi = {10.1007/978-3-642-13568-2_8}, isbn = {978-3-642-13567-5} } queueing/doc/0000775000175000017500000000000013356152316013034 5ustar morenomorenoqueueing/doc/conf.texi0000664000175000017500000000005713356152302014651 0ustar morenomoreno@set VERSION 1.2.6 @set VERSIONDATE 2018-10-06 queueing/doc/qn_closed_single.fig0000664000175000017500000000300512762046576017043 0ustar morenomoreno#FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 5580 270 270 6930 5580 6930 5310 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 4500 270 270 6930 4500 6930 4230 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5317 5043 270 270 5317 5043 5317 4773 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4 0 0 1.00 60.00 120.00 5580 5040 5850 5040 6030 4500 6300 4500 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 5850 5040 6030 5580 6300 5580 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 5 0 0 1.00 60.00 120.00 7470 5580 7470 3960 4770 3960 4770 5040 5040 5040 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 7200 5580 7470 5580 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6300 5310 6660 5310 6660 5850 6300 5850 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6300 4230 6660 4230 6660 4770 6300 4770 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 7200 4500 7470 4500 4 0 0 50 -1 0 12 0.0000 4 135 255 5895 5760 0.7\001 4 0 0 50 -1 0 12 0.0000 4 135 255 5895 4455 0.3\001 4 0 0 50 -1 0 12 0.0000 4 135 210 5175 5490 PS\001 4 0 0 50 -1 0 12 0.0000 4 135 450 6705 4950 FCFS\001 4 0 0 50 -1 0 12 0.0000 4 135 450 6705 6030 FCFS\001 4 0 0 50 -1 0 12 0.0000 4 135 375 5130 4725 CPU\001 4 0 0 50 -1 0 12 0.0000 4 135 480 6705 4185 Disk1\001 4 0 0 50 -1 0 12 0.0000 4 135 480 6705 5265 Disk2\001 4 0 0 50 -1 0 12 0.0000 4 135 105 5265 5085 1\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6885 4545 2\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6885 5625 3\001 queueing/doc/singlestation.texi0000664000175000017500000005447713356152303016627 0ustar morenomoreno@c This file has been automatically generated from singlestation.txi @c by proc.m. Do not edit this file, all changes will be lost @c -*- texinfo -*- @c Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2018 Moreno Marzolla @c @c This file is part of the queueing package. @c @c The queueing package is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public License @c as published by the Free Software Foundation; either version 3 of @c the License, or (at your option) any later version. @c @c The queueing package is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied warranty @c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with the queueing package; see the file COPYING. If not, see @c . @node Single Station Queueing Systems @chapter Single Station Queueing Systems Single Station Queueing Systems contain a single station, and can usually be analyzed easily. The @code{queueing} package contains functions for handling the following types of queues: @ifnottex @menu * The M/M/1 System:: Single-server queueing station. * The M/M/m System:: Multiple-server queueing station. * The Erlang-B Formula:: * The Erlang-C Formula:: * The Engset Formula:: * The M/M/inf System:: Infinite-server (delay center) station. * The M/M/1/K System:: Single-server, finite-capacity queueing station. * The M/M/m/K System:: Multiple-server, finite-capacity queueing station. * The Asymmetric M/M/m System:: Asymmetric multiple-server queueing station. * The M/G/1 System:: Single-server with general service time distribution. * The M/Hm/1 System:: Single-server with hyperexponential service time distribution. @end menu @end ifnottex @iftex @itemize @item @math{M/M/1} single-server queueing station; @item @math{M/M/m} multiple-server queueing station; @item Asymmetric @math{M/M/m}; @item @math{M/M/\infty} infinite-server station (delay center); @item @math{M/M/1/K} single-server, finite-capacity queueing station; @item @math{M/M/m/K} multiple-server, finite-capacity queueing station; @item @math{M/G/1} single-server with general service time distribution; @item @math{M/H_m/1} single-server with hyperexponential service time distribution. @end itemize @end iftex @c @c M/M/1 @c @node The M/M/1 System @section The @math{M/M/1} System The @math{M/M/1} system contains a single server connected to an unbounded FCFS queue. Requests arrive according to a Poisson process with rate @math{\lambda}; the service time is exponentially distributed with average service rate @math{\mu}. The system is stable if @math{\lambda < \mu}. @anchor{doc-qsmm1} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmm1 (@var{lambda}, @var{mu}) @cindex @math{M/M/1} system Compute utilization, response time, average number of requests and throughput for a @math{M/M/1} queue. @tex The steady-state probability @math{\pi_k} that there are @math{k} jobs in the system, @math{k \geq 0}, can be computed as: $$ \pi_k = (1-\rho)\rho^k $$ where @math{\rho = \lambda/\mu} is the server utilization. @end tex @strong{INPUTS} @table @code @item @var{lambda} Arrival rate (@code{@var{lambda} @geq{} 0}). @item @var{mu} Service rate (@code{@var{mu} > @var{lambda}}). @end table @strong{OUTPUTS} @table @code @item @var{U} Server utilization @item @var{R} Server response time @item @var{Q} Average number of requests in the system @item @var{X} Server throughput. If the system is ergodic (@code{@var{mu} > @var{lambda}}), we always have @code{@var{X} = @var{lambda}} @item @var{p0} Steady-state probability that there are no requests in the system. @end table @var{lambda} and @var{mu} can be vectors of the same size. In this case, the results will be vectors as well. @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, Section 6.3 @end itemize @seealso{qsmmm, qsmminf, qsmmmk} @end deftypefn @c @c M/M/m @c @node The M/M/m System @section The @math{M/M/m} System The @math{M/M/m} system is similar to the @math{M/M/1} system, except that there are @math{m \geq 1} identical servers connected to a shared FCFS queue. Thus, at most @math{m} requests can be served at the same time. The @math{M/M/m} system can be seen as a single server with load-dependent service rate @math{\mu(n)}, which is a function of the number @math{n} of requests in the system: @iftex @tex $$\mu(n) = \mu \times \min(m,n)$$ @end tex @end iftex @ifnottex @example mu(n) = min(m,n)*mu @end example @end ifnottex @noindent where @math{\mu} is the service rate of each individual server. @anchor{doc-qsmmm} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pm}] =} qsmmm (@var{lambda}, @var{mu}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pm}] =} qsmmm (@var{lambda}, @var{mu}, @var{m}) @cindex @math{M/M/m} system Compute utilization, response time, average number of requests in service and throughput for a @math{M/M/m} queue, a queueing system with @math{m} identical servers connected to a single FCFS queue. @tex The steady-state probability @math{\pi_k} that there are @math{k} requests in the system, @math{k \geq 0}, can be computed as: $$ \pi_k = \cases{ \displaystyle{\pi_0 { ( m\rho )^k \over k!}} & $0 \leq k \leq m$;\cr \displaystyle{\pi_0 { \rho^k m^m \over m!}} & $k>m$.\cr } $$ where @math{\rho = \lambda/(m\mu)} is the individual server utilization. The steady-state probability @math{\pi_0} that there are no jobs in the system is: $$ \pi_0 = \left[ \sum_{k=0}^{m-1} { (m\rho)^k \over k! } + { (m\rho)^m \over m!} {1 \over 1-\rho} \right]^{-1} $$ @end tex @strong{INPUTS} @table @code @item @var{lambda} Arrival rate (@code{@var{lambda}>0}). @item @var{mu} Service rate (@code{@var{mu}>@var{lambda}}). @item @var{m} Number of servers (@code{@var{m} @geq{} 1}). Default is @code{@var{m}=1}. @end table @strong{OUTPUTS} @table @code @item @var{U} Service center utilization, @math{U = \lambda / (m \mu)}. @item @var{R} Service center mean response time @item @var{Q} Average number of requests in the system @item @var{X} Service center throughput. If the system is ergodic, we will always have @code{@var{X} = @var{lambda}} @item @var{p0} Steady-state probability that there are 0 requests in the system @item @var{pm} Steady-state probability that an arriving request has to wait in the queue @end table @var{lambda}, @var{mu} and @var{m} can be vectors of the same size. In this case, the results will be vectors as well. @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, Section 6.5 @end itemize @seealso{erlangc,qsmm1,qsmminf,qsmmmk} @end deftypefn @c @c Erlang-B @c @node The Erlang-B Formula @section The Erlang-B Formula @anchor{doc-erlangb} @deftypefn {Function File} {@var{B} =} erlangb (@var{A}, @var{m}) @cindex Erlang-B formula Compute the value of the Erlang-B formula @math{E_B(A, m)} giving the probability that an open system with @math{m} identical servers, arrival rate @math{\lambda}, individual service rate @math{\mu} and offered load @math{A = \lambda / \mu} has all servers busy. @tex @math{E_B(A, m)} is defined as: $$ E_B(A, m) = \displaystyle{{A^m \over m!} \left( \sum_{k=0}^m {A^k \over k!} \right) ^{-1}} $$ @end tex @strong{INPUTS} @table @code @item @var{A} Offered load, defined as @math{A = \lambda / \mu} where @math{\lambda} is the mean arrival rate and @math{\mu} the mean service rate of each individual server (real, @math{A > 0}). @item @var{m} Number of identical servers (integer, @math{m @geq{} 1}). Default @math{m = 1} @end table @strong{OUTPUTS} @table @code @item @var{B} The value @math{E_B(A, m)} @end table @var{A} or @var{m} can be vectors, and in this case, the results will be vectors as well. @strong{REFERENCES} @itemize @item G. Zeng, @cite{Two common properties of the erlang-B function, erlang-C function, and Engset blocking function}, Mathematical and Computer Modelling, Volume 37, Issues 12-13, June 2003, Pages 1287-1296 @end itemize @seealso{qsmmm} @end deftypefn @c @c Erlang-c @c @node The Erlang-C Formula @section The Erlang-C Formula @anchor{doc-erlangc} @deftypefn {Function File} {@var{C} =} erlangc (@var{A}, @var{m}) @cindex Erlang-C formula Compute the steady-state probability @math{E_C(A, m)} that an open queueing system with @math{m} identical servers, infinite wating space, arrival rate @math{\lambda}, individual service rate @math{\mu} and offered load @math{A = \lambda / \mu} has all the servers busy. @tex @math{E_C(A, m)} is defined as: $$ E_C(A, m) = \displaystyle{ {A^m \over m!} {1 \over 1-\rho} \left( \sum_{k=0}^{m-1} {A^k \over k!} + {A^m \over m!} {1 \over 1 - \rho} \right) ^{-1}} $$ where @math{\rho = A / m = \lambda / (m \mu)}. @end tex @strong{INPUTS} @table @code @item @var{A} Offered load. @math{A = \lambda / \mu} where @math{\lambda} is the mean arrival rate and @math{\mu} the mean service rate of each individual server (real, @math{0 < A < m}). @item @var{m} Number of identical servers (integer, @math{m @geq{} 1}). Default @math{m = 1} @end table @strong{OUTPUTS} @table @code @item @var{B} The value @math{E_C(A, m)} @end table @var{A} or @var{m} can be vectors, and in this case, the results will be vectors as well. @seealso{qsmmm} @end deftypefn @c @c Engset @c @node The Engset Formula @section The Engset Formula @anchor{doc-engset} @deftypefn {Function File} {@var{B} =} engset (@var{A}, @var{m}, @var{n}) @cindex Engset loss formula Compute the Engset blocking probability @math{P_b(A, m, n)} for a system with a finite population of @math{n} users, @math{m} identical servers, no queue, individual service rate @math{\mu}, individual arrival rate @math{\lambda} (i.e., the time until a user tries to request service is exponentially distributed with mean @math{1 / \lambda}), and offered load @math{A = \lambda / \mu}. @tex @math{P_b(A, m, n)} is defined for @math{n > m} as: $$ P_b(A, m, n) = {{\displaystyle{A^m {n \choose m}}} \over {\displaystyle{\sum_{k=0}^m A^k {n \choose k}}}} $$ and is 0 if @math{n @leq{} m}. @end tex @strong{INPUTS} @table @code @item @var{A} Offered load, defined as @math{A = \lambda / \mu} where @math{\lambda} is the mean arrival rate and @math{\mu} the mean service rate of each individual server (real, @math{A > 0}). @item @var{m} Number of identical servers (integer, @math{m @geq{} 1}). Default @math{m = 1} @item @var{n} Number of requests (integer, @math{n @geq{} 1}). Default @math{n = 1} @end table @strong{OUTPUTS} @table @code @item @var{B} The value @math{P_b(A, m, n)} @end table @var{A}, @var{m} or @math{n} can be vectors, and in this case, the results will be vectors as well. @seealso{erlangb, erlangc} @end deftypefn @c @c M/M/inf @c @node The M/M/inf System @section The @math{M/M/}inf System The @math{M/M/\infty} system is a special case of @math{M/M/m} system with infinitely many identical servers (i.e., @math{m = \infty}). Each new request is always assigned to a new server, so that queueing never occurs. The @math{M/M/\infty} system is always stable. @anchor{doc-qsmminf} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmminf (@var{lambda}, @var{mu}) Compute utilization, response time, average number of requests and throughput for a @math{M/M/\infty} queue. The @math{M/M/\infty} system has an infinite number of identical servers; this kind of system is always stable for every arrival and service rates. @cindex @math{M/M/}inf system @tex The steady-state probability @math{\pi_k} that there are @math{k} requests in the system, @math{k @geq{} 0}, can be computed as: $$ \pi_k = {1 \over k!} \left( \lambda \over \mu \right)^k e^{-\lambda / \mu} $$ @end tex @strong{INPUTS} @table @code @item @var{lambda} Arrival rate (@code{@var{lambda}>0}). @item @var{mu} Service rate (@code{@var{mu}>0}). @end table @strong{OUTPUTS} @table @code @item @var{U} Traffic intensity (defined as @math{\lambda/\mu}). Note that this is different from the utilization, which in the case of @math{M/M/\infty} centers is always zero. @cindex traffic intensity @item @var{R} Service center response time. @item @var{Q} Average number of requests in the system (which is equal to the traffic intensity @math{\lambda/\mu}). @item @var{X} Throughput (which is always equal to @code{@var{X} = @var{lambda}}). @item @var{p0} Steady-state probability that there are no requests in the system @end table @var{lambda} and @var{mu} can be vectors of the same size. In this case, the results will be vectors as well. @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, Section 6.4 @end itemize @seealso{qsmm1,qsmmm,qsmmmk} @end deftypefn @c @c M/M/1/k @c @node The M/M/1/K System @section The @math{M/M/1/K} System In a @math{M/M/1/K} finite capacity system there is a single server, and there can be at most @math{K} jobs at any time (including the job currently in service), @math{K > 1}. If a new request tries to join the system when there are already @math{K} other requests, the request is lost. The queue has @math{K-1} slots. The @math{M/M/1/K} system is always stable, regardless of the arrival and service rates. @anchor{doc-qsmm1k} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pK}] =} qsmm1k (@var{lambda}, @var{mu}, @var{K}) @cindex @math{M/M/1/K} system Compute utilization, response time, average number of requests and throughput for a @math{M/M/1/K} finite capacity system. In a @math{M/M/1/K} queue there is a single server; the maximum number of requests in the system (including the request being served) is @math{K}, and the maximum queue length is @math{K-1}. @tex The steady-state probability @math{\pi_k} that there are @math{k} jobs in the system, @math{0 @leq{} k @leq{} K}, is: $$ \pi_k = {(1-a)a^k \over 1-a^{K+1}} $$ where @math{a = \lambda/\mu}. @end tex @strong{INPUTS} @table @code @item @var{lambda} Arrival rate (@code{@var{lambda}>0}). @item @var{mu} Service rate (@code{@var{mu}>0}). @item @var{K} Maximum number of requests allowed in the system (@code{@var{K} @geq{} 1}). @end table @strong{OUTPUTS} @table @code @item @var{U} Service center utilization, which is defined as @code{@var{U} = 1-@var{p0}} @item @var{R} Service center response time @item @var{Q} Average number of requests in the system @item @var{X} Service center throughput @item @var{p0} Steady-state probability that there are no requests in the system @item @var{pK} Steady-state probability that there are @math{K} requests in the system (i.e., that the system is full) @end table @var{lambda}, @var{mu} and @var{K} can be vectors of the same size. In this case, the results will be vectors as well. @seealso{qsmm1,qsmminf,qsmmm} @end deftypefn @c @c M/M/m/k @c @node The M/M/m/K System @section The @math{M/M/m/K} System The @math{M/M/m/K} finite capacity system is similar to the @math{M/M/1/k} system except that the number of servers is @math{m}, where @math{1 \leq m \leq K}. The queue has @math{K-m} slots. The @math{M/M/m/K} system is always stable. @anchor{doc-qsmmmk} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}, @var{pK}] =} qsmmmk (@var{lambda}, @var{mu}, @var{m}, @var{K}) @cindex @math{M/M/m/K} system Compute utilization, response time, average number of requests and throughput for a @math{M/M/m/K} finite capacity system. In a @math{M/M/m/K} system there are @math{m \geq 1} identical service centers sharing a fixed-capacity queue. At any time, at most @math{K @geq{} m} requests can be in the system, including those being served. The maximum queue length is @math{K-m}. This function generates and solves the underlying CTMC. @tex The steady-state probability @math{\pi_k} that there are @math{k} jobs in the system, @math{0 @leq{} k @leq{} K}, is: $$ \pi_k = \cases{ \displaystyle{{\rho^k \over k!} \pi_0} & if $0 \leq k \leq m$;\cr \displaystyle{{\rho^m \over m!} \left( \rho \over m \right)^{k-m} \pi_0} & if $m < k \leq K$\cr} $$ where @math{\rho = \lambda/\mu} is the offered load. The probability @math{\pi_0} that the system is empty can be computed by considering that all probabilities must sum to one: @math{\sum_{k=0}^K \pi_k = 1}, which gives: $$ \pi_0 = \left[ \sum_{k=0}^m {\rho^k \over k!} + {\rho^m \over m!} \sum_{k=m+1}^K \left( {\rho \over m}\right)^{k-m} \right]^{-1} $$ @end tex @strong{INPUTS} @table @code @item @var{lambda} Arrival rate (@code{@var{lambda}>0}) @item @var{mu} Service rate (@code{@var{mu}>0}) @item @var{m} Number of servers (@code{@var{m} @geq{} 1}) @item @var{K} Maximum number of requests allowed in the system, including those being served (@code{@var{K} @geq{} @var{m}}) @end table @strong{OUTPUTS} @table @code @item @var{U} Service center utilization @item @var{R} Service center response time @item @var{Q} Average number of requests in the system @item @var{X} Service center throughput @item @var{p0} Steady-state probability that there are no requests in the system. @item @var{pK} Steady-state probability that there are @var{K} requests in the system (i.e., probability that the system is full). @end table @var{lambda}, @var{mu}, @var{m} and @var{K} can be either scalars, or vectors of the same size. In this case, the results will be vectors as well. @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, Section 6.6 @end itemize @seealso{qsmm1,qsmminf,qsmmm} @end deftypefn @c @c Asymmetric M/M/m @c @node The Asymmetric M/M/m System @section The Asymmetric @math{M/M/m} System The Asymmetric @math{M/M/m} system contains @math{m} servers connected to a single queue. Differently from the @math{M/M/m} system, in the asymmetric @math{M/M/m} each server may have a different service time. @anchor{doc-qsammm} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qsammm (@var{lambda}, @var{mu}) @cindex asymmetric @math{M/M/m} system Compute @emph{approximate} utilization, response time, average number of requests in service and throughput for an asymmetric @math{M/M/m} queue. In this type of system there are @math{m} different servers connected to a single queue. Each server has its own (possibly different) service rate. If there is more than one server available, requests are routed to a randomly-chosen one. @strong{INPUTS} @table @code @item @var{lambda} Arrival rate (@code{@var{lambda}>0}) @item @var{mu} @code{@var{mu}(i)} is the service rate of server @math{i}, @math{1 @leq{} i @leq{} m}. The system must be ergodic (@code{@var{lambda} < sum(@var{mu})}). @end table @strong{OUTPUTS} @table @code @item @var{U} Approximate service center utilization, @math{U = \lambda / ( \sum_i \mu_i )}. @item @var{R} Approximate service center response time @item @var{Q} Approximate number of requests in the system @item @var{X} Approximate system throughput. If the system is ergodic, @code{@var{X} = @var{lambda}} @end table @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998 @end itemize @seealso{qsmmm} @end deftypefn @c @c @c @node The M/G/1 System @section The @math{M/G/1} System @anchor{doc-qsmg1} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmg1 (@var{lambda}, @var{xavg}, @var{x2nd}) @cindex @math{M/G/1} system Compute utilization, response time, average number of requests and throughput for a @math{M/G/1} system. The service time distribution is described by its mean @var{xavg}, and by its second moment @var{x2nd}. The computations are based on results from L. Kleinrock, @cite{Queuing Systems}, Wiley, Vol 2, and Pollaczek-Khinchine formula. @strong{INPUTS} @table @code @item @var{lambda} Arrival rate @item @var{xavg} Average service time @item @var{x2nd} Second moment of service time distribution @end table @strong{OUTPUTS} @table @code @item @var{U} Service center utilization @item @var{R} Service center response time @item @var{Q} Average number of requests in the system @item @var{X} Service center throughput @item @var{p0} Probability that there is not any request at system @end table @var{lambda}, @var{xavg}, @var{t2nd} can be vectors of the same size. In this case, the results will be vectors as well. @seealso{qsmh1} @end deftypefn @c @c @c @node The M/Hm/1 System @section The @math{M/H_m/1} System @anchor{doc-qsmh1} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{p0}] =} qsmh1 (@var{lambda}, @var{mu}, @var{alpha}) @cindex @math{M/H_m/1} system Compute utilization, response time, average number of requests and throughput for a @math{M/H_m/1} system. In this system, the customer service times have hyper-exponential distribution: @tex $$ B(x) = \sum_{j=1}^m \alpha_j(1-e^{-\mu_j x}),\quad x>0 $$ @end tex @ifnottex @example @group ___ m \ B(x) = > alpha(j) * (1-exp(-mu(j)*x)) x>0 /__ j=1 @end group @end example @end ifnottex where @math{\alpha_j} is the probability that the request is served at phase @math{j}, in which case the average service rate is @math{\mu_j}. After completing service at phase @math{j}, for some @math{j}, the request exits the system. @strong{INPUTS} @table @code @item @var{lambda} Arrival rate @item @var{mu} @code{@var{mu}(j)} is the phase @math{j} service rate. The total number of phases @math{m} is @code{length(@var{mu})}. @item @var{alpha} @code{@var{alpha}(j)} is the probability that a request is served at phase @math{j}. @var{alpha} must have the same size as @var{mu}. @end table @strong{OUTPUTS} @table @code @item @var{U} Service center utilization @item @var{R} Service center response time @item @var{Q} Average number of requests in the system @item @var{X} Service center throughput @end table @end deftypefn queueing/doc/demo_web.m0000664000175000017500000000552712762264073015010 0ustar morenomoreno## Copyright (C) 2012, 2016 Moreno Marzolla ## ## This file is part of the queueing toolbox. ## ## The queueing toolbox is free software: you can redistribute it and/or ## modify it under the terms of the GNU General Public License as ## published by the Free Software Foundation, either version 3 of the ## License, or (at your option) any later version. ## ## The queueing toolbox is distributed in the hope that it will be ## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with the queueing toolbox. If not, see 1; # not a function file # figure (1, "visible", "off"); # do not show plot window page_screen_output(0); # avoid output pagination N = 100; # total population size beta = linspace(0.1,0.9,18); # population mix for class 1 D = [12 14 23 20 80 31; ... 2 20 14 90 30 33 ]; V = ones(size(D)); X1 = X1 = XX = zeros(size(beta)); R1 = R2 = RR = zeros(size(beta)); for i=1:length(beta) pop = [fix(beta(i)*N) N-fix(beta(i)*N)]; [U R Q X] = qncmmva( pop, D, V ); X1(i) = X(1,1) / V(1,1); X2(i) = X(2,1) / V(2,1); XX(i) = X1(i) + X2(i); R1(i) = dot(R(1,:), V(1,:)); R2(i) = dot(R(2,:), V(2,:)); RR(i) = N / XX(i); endfor ## Plot throughput and response times ## set(gcf,"paperorientation","landscape"); ## papersize=[4 3] * 2; margin=[0 0]; ## set(gcf,"papersize",papersize); ## set(gcf,"paperposition", [margin papersize-margin*2]); subplot(2,1,1); plot(beta, X1, "--;Class 1;", "linewidth", 2, ... beta, X2, ":;Class 2;", "linewidth", 2, ... beta, XX, "-;System;", "linewidth", 2 ); ylabel("Throughput"); legend("location", "south", "orientation", "horizontal"); legend("boxoff"); title("Throughput and response time vs population mix"); subplot(2,1,2); plot(beta, R1, "--;Class 1;", "linewidth", 2, ... beta, R2, ":;Class 2;", "linewidth", 2, ... beta, RR, "-;System;", "linewidth", 2 ); ax = axis(); ax(3) = 0; axis(ax); legend("location", "south", "orientation", "horizontal"); legend("boxoff"); xlabel("Class 1 population mix"); ylabel("Response Time"); print("web.eps", "-deps2", "-mono", "-tight"); clf; ## Plot system power ## set(gcf,"paperorientation","landscape"); ## papersize=[4 2.5] * 1.2; margin=[0 0]; ## set(gcf,"papersize",papersize); ## set(gcf,"paperposition", [margin papersize-margin*2]); plot(beta, X1./R1, "--;Class 1;", "linewidth", 2, ... beta, X2./R2, ":;Class 2;", "linewidth", 2, ... beta, XX./RR, "-;System;", "linewidth", 2); legend("location","south", "orientation", "horizontal"); legend("boxoff"); xlabel("Class 1 population mix"); ylabel("Power"); title("Power as a function of the population mix"); print("power.eps", "-deps2", "-mono", "-tight"); queueing/doc/qn_closed_multi_apl.png0000664000175000017500000001605313356152313017561 0ustar morenomoreno‰PNG  IHDR’ݸîh 7iCCPdefault_rgb.iccxœ•‘gP”‡†Ï÷}Û ì²tXz“*eé½I¯¢Kï,K±!b"Šˆ4E €£R$VD±° Y$(×`QA¹?rgâÜ;þ¸Ï¯gÞyçœ3s(¢¨(@Jª€ïçbÏ ãÀ7Dò2Óí||<á»|àî÷;ß…“É€Èç¥óH.hæÒÈq`E%¥ óÀ⇄† ·€÷·O+êo_?ÀÏÅhqßxÔ7þŸ½Êv|ABlL.Ç?-VÉádú¹ØsÜ8>ü´Ø„ä˜oþ¿ÊßA“+pHKßÂOˆ‹pþg¨‘¡!üó‹w¾€ÂüïÿÀ7½´Fî"vàŸ,ª {€Ô“2ÕãŒB€®{¼,~öß` ¤AT@tÁÌÀlÁ ÜÁ 6â!øù° Š Àa¨zh‚h‡³Ð áÜ„»pFá)a^Ã|€eAˆa"Òˆ"¢†è F±FœOÄ E"8$ÉBò‘ÝH RŽÔ H ò r¹†ÜF†‘ÇÈ$2‡ü…|F1”†²PyTÕG¹¨ê Ñ84ÍC ÑýhÚˆžF»Ðkè]t¢¯ÑE 0*ÆÆ”0]Œ‹9`ÞX‹ñ±íX1V‰5bíX/6€=À„Ø<ö GÀ1qœ.ÎçŠ Äñp¸í¸R\ î® ×{€›Ä-à¾âéx9¼Þï†ÁÇásðEøJ|3¾?ŠŸÆ l‚ÁŒàJ%$¶J G „«„aÂa‘H$JuˆVDob$Q@,"VO¯GˆÓÄ$*I‘dDr&…‘RI¤JR+é2i„4CZ&‹’ÕÈdor4y ¹ŒÜDî%ß#O“—)b Š%€’HÙE©¢´SnP&(ï¨Tª2ÕœêKM î¤VQÏPoQ'©Ÿhâ4mš-œ–EÛO;I»J{L{G§ÓÕé¶ô0º€¾ŸÞB¿NNÿ(ÂÑq‰Ù!R+Ò%2"ò†Af¨1ì›yŒJÆ9Æ=Ƽ(YT]ÔA4Rt»h­èÑqÑE1¦˜¡˜·XŠX©X«Øm±Yq¢¸º¸“x´x¡ø ñëâSLŒ©Ât`ò˜»™MÌÌi¥Árc%²JX?³†X âÆA¹µ—$„lŒ­Îvc'³ËØgÙcìÏ’ò’v’1’û$Û%G$—¤d¥l¥b¤Š¥:¤F¥>Ks¤¤“¤JwK?“ÁÉhËøÊäÈ“¹!3/Ë’µ”åÉËž•}"‡ÊiËùÉm•;!7(·(¯ ï"Ÿ._-]~^­`«¨P¡pYaN‘©h­˜ X¡xEñG‚cÇIæTqú9 JrJ®JYJ JCJËÊÊÊÊÊÏT(*\•X• •>•UEU/Õ|Õ6Õ'jd5®Z¼Úµµ%u õ`õ½êÝê³RnymštMÍ ÍF͇Z-®V’ÖQ­ûÚ¨¶‰v¼v­ö=TÇT'Aç¨Îðüó5©k׌ëÒtít³uÛt'õØzžzzÝzoôUõÃôêè501H6h2xj(nènX`Økø—‘¶ϨÖèáZúZçµ;Öö¬}k¬cc|Ìø‘ ÓÄËd¯IŸÉS3S¾i»éœ™ªY„YÙ8—Åõá–ro™ãÍíÍw˜_4ÿdaj!°8kñ§¥®e’e«åì:u1ëšÖMY)[EZ5X ­9ÖÖÇ­…6J6‘66/lUl£m›mgì´ìíNÛ½±7°çÛwÚ/9X8ls¸êˆ9º8;9‰;:Õ8=wVvŽsns^p1qÙêrÕïêázÐuÜMÞçÖâ¶ànæ¾Í½ßƒæáïQãñÂSÛ“ïÙë…z¹{òšX¯¶>u}·7x»yò~æ£á“áó«/Á×Ç·Ö÷¥Ÿ¡_¾ß€?Ó³«ÿ‡û€²€§šY}AŒ ð – ¥`Çàò`aˆ~ȶ»¡2¡ ¡=aİ °æ°Å No˜7 / Û¨±1wãíM2›’7]ÚÌØ¹ù\>"8¢5b%Ò;²1r1Ê-ª.jçÀ;Â{m]=cS3k[;gw(n.Þ&¾2~>Á!¡&ám¢kb}âR’wÒɤÕäàäŽRJDÊ…TñÔ¤Ôþ4…´Ü´átô¢ta†EÆáŒ¾¿9ÉܘÙ#` ÒƒYšY{²&³­³k³?æåœËËMÍÜ¢½eß–™<缟¶â¶ò¶öå+åïÊŸÜf·­a;²=j{ß•…;¦wºì<µ‹²+i×oåïwïî-”/ÜY8µÇeO[‘H¿h|¯åÞúp?$ü0´oí¾ê}_‹£‹ï””T–¬”òJïühøcÕ«ûc÷•™–;@8z`ì ÍÁSåbåyåS‡¼uUp*Š+ÞÞ|øv¥qeýÊ‘¬#Â*ϪžjÕêÕ+5ñ5£µöµuruûê–ŽF9f{¬½^¾¾¤þóñ„ã\ºÕ+ONdŸxÙÔ4ð÷§–f™æ’æ/'SO Oùêo1kii•k-kCÛ²ÚæN‡Ÿ¾ÿ³ãÏ=íºí 쎒3p&ëÌ«_"~;ëq¶ï÷\ûyµóuÌÎâ.¤kK×Bw|·°'´gø‚û…¾^ËÞÎ_õ~=yQébí%‰Ke—)— /¯^É»²x5ýêüµ¸kS}›ûž^¹þ°ß·è†Ç[7o^°¸rËêÖÅÛ·/ÜáÞé¾kz·kÐd°ó7“ß:‡L‡ºî™Ýë¹o~¿wxÝð囑kÜ|èöðîèúÑá±À±GãáãÂGÑf'?~û$ûÉòÓø‰âg¢Ï*ŸË=oü]ë÷¡©ðÒ¤ãäà ÿO§xS¯ÿÈüceºð%ýeåŒâLˬÑìÅ9ç¹û¯6¼š~þzy¾è_bÿª{£ùæüŸ¶.„,L¿å¿]ý«ôô»“ïß÷-ú,>ÿòay©ø£ôÇSŸ¸Ÿ>žYÎY!®T}ÑúÒûÕãëÄjÊêê¿B,¾½‹ Þ pHYs N NwŒ#tEXtSoftwareGPL Ghostscript 9.25Á™? qIDATxœíÝÛv£¸@Q|Fýÿ/sè¦)®hKs>¥»ÛIì• ðëû¾D¶€@ú¾ÿß×àÙ‚ù3ýŒ@™~¿ßø±i F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`d F¶€`þ|ýÂøý~}ß~Îþ',oaçKïÚ$[I{4B3ýäÙÿ>˜öhüxùUÀ*‰'$Æk4Ö§ÿ×x;†,¸L¶Ž­ÕI‚ûd뜌 ËxSÐÙ:°Üu“ n’­cBE‘­T«où]`Ûn’­=&Æ×ÈÖÃ5V§µà>ËM7åMÌìÖŒZp™líÙ‰Ëåc} n’­sú¾OŸÂ ž [ë†6í*eಓ­Mû[ˆo>`Ê;‰+T J&[ë·þ¾ œ°Ò2ÙšK)·»´ìS£q²u×˃9 dë/.1½ùUû'„vx'ñ³"윯fÙŽñ“wþ)ñ~wþçÈ"“­¤·`ç3/Eƒà,‰@0²#[@0²#[@0²#[@0²c¹if‰ÇßXe —ÉÖ]÷<”08E¶.ÊxTóxSú)dë´­`Î…ã®N¶NÉ{±­‹ÅŠì“­$Ë`eÌÊj¿Ä ¶ÈÖGƒµzËâû¬ÛÚ3kVß÷/dy/Nj S²µi¶Fáå‘gvÊ#ÙZ1;kû‡Ûh³r‰t²µ´Ü0üꑬ>åÙúKiÍ(LÉ־ݙµÏ®.ÉÖ? Ù™µO¹ “­¥b›5(üáÁ d«ëÂN.A6Ü$[16§l*Ò¸Ö³®Yå¢e­gk¨Yƒpri:[ÑÏÏ·uê¨[ÓÙ"j7[ÑG­‹µ›­ú(h4[uŒZƒ ¾8¥Ñlqµ˜­šF­=\4¥Ål¡ÉÖ#L=ðœæ²õôâW§N¶H;\p,½€wÈV6æxG‰Ùzᬠռ‡8Õ÷½bÒ‚³5•7a¼ª¿_•]†AéÙš zn, ¯³•r< ƒf•˜­) fJÏÖ”„Ý,[•í±n-aÓï7į²…_ Ohe•|ˆ—1"ÒFâeþªCMþt_Õ)£S¸oê¾érÓ’¿}“/7…™¶¤ -©–JÌÖa­¤ ZVb¶VI0(:[R,•˜­çjõ©]Jx›Lî©[+ËMgžˆËìtÌ„b Jœ¶‚2ãÀ;¶€¸šËV­g|±>²h.[@t²Ób¶êÛN´…HSZÌZëÙª`àªà[€SÍV•SU~S°Ôh¶ºZöpÙ«EƒÚÍTÓÙŠ>pµhSÓÙš W®pri=[)—Œ-Pk—€„©Ö³Õ,—fÑ8Ù‚‘­® 5pµ@¶þ¢\šlMÍÊUT¼fG³h™lýe–ƒBÊ5{šEãdk®´riÌÈÖŠrÊ¥Y°äÊ=ë†@ŒÕ>x³‚[L[{–c× “×ò^4 ¦L[fcW÷ääµl¢`Á’l%ÙŠW—£,«œ`ÁÙ:¡ïûeb.÷kg{S³`‡l³sŠ®û»½Ô RÈÖEO1¨VpŠlÝuí`F©‚Ëd+'1‚X·#[@0²#[@0²ãD8aë¸Ñßï—x¾£åÛÍ)Gw¥ßo d R-¢ß9)ÈòP°­¾ÌŽxÝêZÉ' ™DH²zæ¾ïw† sPJ³ï·z²ÇöG›ÄrÎG‰Û)÷[7Ù‚`Ñ Ü![/Y]z*^|õËò$Y’­÷¬®Òò¤ dõ—õÂêÙ¯î·XîyÛì ¼#{‚Xþâ–ÿºoùµ)鹿õñ‚Éæì_¿ËyD×ò˜Àeî)‚Eƒpl}ɸÈÖã,„¼dëq B^²#[/1pA.²•GJ•,„,,7½+q ¡EƒÌœÀ=IF²uWÊ“iüϼÆe¹ú´g‘lÁã®]lë«Ú¼rÊ”lÁƒîìH9Ž¢Í‹É³?gýªvÈáì ÕòÌ%[ð¥k£Sã—lA¹\Õu•lÁ—VÔ뢊µòN"agzÚ_'Ñ—wåK¿ü¦ö·gÿ*^#ÙúÏÙi<ý ´µÖ9ås_]«Ù¯{õW¼ºJËó¡“­©­5ÍSv4¤ÑÀ“RÈÖS®5Ⱥž;d+ƒ­gØå‰L¼ª”åÔ4.×ÖY·uÇÎ>ˆk î­‡®Ìòi~€Îþ½Ɵ²•Ç21žX¬‡ng^¸ü .OßÌ”Ä[vV½çºM[‹Ðu]ÿ¯N¶2Ú?˜ñ傲u×Cc¼­Ø"[9}Ðzh¸@¶2¸¼3Þzh¸@¶€`d+;ïX¸àÙš{4"§–§¶³¾ N±Üô?[kšw>s¯ÖNŒ¦Ÿi=4œRá"l gŠä&‰@06\Þ•/Ù6ä&‰@0²#[@0²c—|6)Ëëí†ûdëº ‡e<• 4K¶NËuТ„Á5²uB–ÃT¶ÈV’ÕÖ\«ÌÎe¨Å RÈÖe°2fe¼©ÙEÆòÞ TF¶6=¬Õ[/H![ëfÍz'.ï )*|UÜ÷ù{|ŸDó5²ÅM¦­¿Ò‹ÙØeƒ¦ÜóŸBšµõ\)²õÒš5P.X’­®[ìÌ*¤Yå‚Ùú~ü¡ÒJ ßj=[å7kÉÀEãZÏV ;GASšÎV¸QK¹ k9[áš5P.h7[£@Í„{ÀW£Ùªæø j4[ÑE¯-œõûW׿¡ÔõZÑ¿84}¶77mÙª‚èšËÖ¨‚ eõä¨P½v³ÕV¶êÛdà¢Ame ¨€lÁ4tRæ¶¿ºp†-DšbÚÊc\wø?} ¯Ý|¨¡ië9ËKTTÑ0øPsÓÖC™Ý¬ó‘ÂsJœ¶žØCôÜT ÃT¬Ý[õ-Cáe%fk&艱º/jRBCá Ó'v‰ÙÚyµ˜°B´£Äluiçð,0aÀ ÍÖTÜ„ÚßÈÖTÄ„•ð &粕8>¤¼PïßTÊQÄŸÏ;ï7+å[>|Té?·Œ¿kHô§ó†ô3¼Vá!Á6gÒ'‹÷"tþ À3Îe+ãëðòMeÙzÁW!Ëýæ}ð%ü:¨IŒi+JªÖ|£ÊÍV¬T4 žVb¶öƒUr4 ^Pb¶–B´`¿Yï-Ä .˜.x(7[±^%4 Qb¶žx…‡g?Qñ–óÞìÙhî4Ù}ëâ*qÚŠE’àe M[µ^ Õ±Y´¦¡luøÓù+ „ÒÖ´Ußv¢-DÔV¶€ ´›­ .£mj.[^á]sÙš =pµhV‹ËMc]ÃèþþóÜè´ý-E£-k4[SáÊîC^íf+å’‹*í*ð¾v³Õ|Ùktgk*ÐÀÕimû_×u¿}ý`>hS±ð‡¯1mÅ(—ÍCÉVו]®Ù ¬Y [ÿ˜•«x͆fA'[S³(|^.Í‚U²õ—rÊ5Û0Ô,µxLâ¾!c5†Þ¬†! –¦´™¶Ö-Ç®&¯å½h,™¶6ÍÆ®îÉÉkÙDÁ‚-²u`y–›Œg_Xà öÉÖ±åØ5¸Ü¯íMÍ‚C²•jç]÷w{©¤“­Ó2žbP­à—w½îÚ!A~Úp“i+1‚×X·#[@0²#[@0²óó‹i F¶€`d F¶€`þtYO ð4ÓŒlÁÈŒlÁ8ßÖ]§N ¿u…žßÏá J¶îZ^ c+@Ë땽sùE¨€Ë»æw8+­^c±ï{Cœ%[oØ©” N‘­RØZ„D²U¤“­W¹5Ü'[o¸vEE`•l}Àº¸ÃU©_Ò÷ý,U«K"€C¦­÷¬®Ò2vÁY²õ¶e¼” N‘­o(\&[ŸQ.¸F¶¾d<\ [s@"Ü×ÿ«“­,—>wÈŒl½ÄÀ¹ÈV)UZý©„³\Þõ®eŒVžËs7OùÉCºßt‡±P>‰@0²#[@0²ãò®@.ï &[@0²#[@0²#[@0²ãò®@0¦- Ù‚‘- Ù‚‘- ˜Ÿ·XL[@0²#[@0²ãò®@0¦- Ù‚‘- Ù‚‘- Ù‚qUj W¥“- Ù‚‘- ˜s»äǽbûRŽm|ÿ¦Rn­Ì›J¿µ2o*åÖʼ©ô[+ó¦Rn­Ì›Ú¿5ÓÌÙrú ç’‚ù?ÈöG]ƒóthIEND®B`‚queueing/doc/qn_open_single.fig0000664000175000017500000000341412762046576016537 0ustar morenomoreno#FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 5580 270 270 6930 5580 6930 5310 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 4500 270 270 6930 4500 6930 4230 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5299 5029 270 270 5299 5029 5299 4759 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4 0 0 1.00 60.00 120.00 5580 5040 5850 5040 6030 4500 6300 4500 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 5850 5040 6030 5580 6300 5580 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 7200 5580 7470 5580 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6300 5310 6660 5310 6660 5850 6300 5850 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6300 4230 6660 4230 6660 4770 6300 4770 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 7200 4500 7470 4500 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 4500 5040 5040 5040 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 4 0 0 1.00 60.00 120.00 7470 5580 7470 3960 4860 3960 4860 5040 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 5760 5040 5760 6210 4 0 0 50 -1 0 12 0.0000 4 135 255 5445 5940 0.2\001 4 0 0 50 -1 0 12 0.0000 4 135 255 5940 5760 0.5\001 4 0 0 50 -1 0 12 0.0000 4 135 255 5940 4455 0.3\001 4 0 0 50 -1 32 12 0.0000 4 150 105 4365 5130 l\001 4 0 0 50 -1 0 12 0.0000 4 135 375 5130 4725 CPU\001 4 0 0 50 -1 0 12 0.0000 4 135 480 6705 4185 Disk1\001 4 0 0 50 -1 0 12 0.0000 4 135 480 6705 5265 Disk2\001 4 0 0 50 -1 0 12 0.0000 4 135 105 5265 5085 1\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6885 4545 2\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6885 5625 3\001 4 0 0 50 -1 0 12 0.0000 4 135 450 6705 6030 FCFS\001 4 0 0 50 -1 0 12 0.0000 4 135 450 6705 4950 FCFS\001 4 0 0 50 -1 0 12 0.0000 4 135 210 5220 5490 PS\001 queueing/doc/qn_closed_multi_cs.png0000664000175000017500000002276713356152313017423 0ustar morenomoreno‰PNG  IHDR›ë:Áo 7iCCPdefault_rgb.iccxœ•‘gP”‡†Ï÷}Û ì²tXz“*eé½I¯¢Kï,K±!b"Šˆ4E €£R$VD±° Y$(×`QA¹?rgâÜ;þ¸Ï¯gÞyçœ3s(¢¨(@Jª€ïçbÏ ãÀ7Dò2Óí||<á»|àî÷;ß…“É€Èç¥óH.hæÒÈq`E%¥ óÀ⇄† ·€÷·O+êo_?ÀÏÅhqßxÔ7þŸ½Êv|ABlL.Ç?-VÉádú¹ØsÜ8>ü´Ø„ä˜oþ¿ÊßA“+pHKßÂOˆ‹pþg¨‘¡!üó‹w¾€ÂüïÿÀ7½´Fî"vàŸ,ª {€Ô“2ÕãŒB€®{¼,~öß` ¤AT@tÁÌÀlÁ ÜÁ 6â!øù° Š Àa¨zh‚h‡³Ð áÜ„»pFá)a^Ã|€eAˆa"Òˆ"¢†è F±FœOÄ E"8$ÉBò‘ÝH RŽÔ H ò r¹†ÜF†‘ÇÈ$2‡ü…|F1”†²PyTÕG¹¨ê Ñ84ÍC ÑýhÚˆžF»Ðkè]t¢¯ÑE 0*ÆÆ”0]Œ‹9`ÞX‹ñ±íX1V‰5bíX/6€=À„Ø<ö GÀ1qœ.ÎçŠ Äñp¸í¸R\ î® ×{€›Ä-à¾âéx9¼Þï†ÁÇásðEøJ|3¾?ŠŸÆ l‚ÁŒàJ%$¶J G „«„aÂa‘H$JuˆVDob$Q@,"VO¯GˆÓÄ$*I‘dDr&…‘RI¤JR+é2i„4CZ&‹’ÕÈdor4y ¹ŒÜDî%ß#O“—)b Š%€’HÙE©¢´SnP&(ï¨Tª2ÕœêKM î¤VQÏPoQ'©Ÿhâ4mš-œ–EÛO;I»J{L{G§ÓÕé¶ô0º€¾ŸÞB¿NNÿ(ÂÑq‰Ù!R+Ò%2"ò†Af¨1ì›yŒJÆ9Æ=Ƽ(YT]ÔA4Rt»h­èÑqÑE1¦˜¡˜·XŠX©X«Øm±Yq¢¸º¸“x´x¡ø ñëâSLŒ©Ât`ò˜»™MÌÌi¥Árc%²JX?³†X âÆA¹µ—$„lŒ­Îvc'³ËØgÙcìÏ’ò’v’1’û$Û%G$—¤d¥l¥b¤Š¥:¤F¥>Ks¤¤“¤JwK?“ÁÉhËøÊäÈ“¹!3/Ë’µ”åÉËž•}"‡ÊiËùÉm•;!7(·(¯ ï"Ÿ._-]~^­`«¨P¡pYaN‘©h­˜ X¡xEñG‚cÇIæTqú9 JrJ®JYJ JCJËÊÊÊÊÊÏT(*\•X• •>•UEU/Õ|Õ6Õ'jd5®Z¼Úµµ%u õ`õ½êÝê³RnymštMÍ ÍF͇Z-®V’ÖQ­ûÚ¨¶‰v¼v­ö=TÇT'Aç¨Îðüó5©k׌ëÒtít³uÛt'õØzžzzÝzoôUõÃôêè501H6h2xj(nènX`Økø—‘¶ϨÖèáZúZçµ;Öö¬}k¬cc|Ìø‘ ÓÄËd¯IŸÉS3S¾i»éœ™ªY„YÙ8—Åõá–ro™ãÍíÍw˜_4ÿdaj!°8kñ§¥®e’e«åì:u1ëšÖMY)[EZ5X ­9ÖÖÇ­…6J6‘66/lUl£m›mgì´ìíNÛ½±7°çÛwÚ/9X8ls¸êˆ9º8;9‰;:Õ8=wVvŽsns^p1qÙêrÕïêázÐuÜMÞçÖâ¶ànæ¾Í½ßƒæáïQãñÂSÛ“ïÙë…z¹{òšX¯¶>u}·7x»yò~æ£á“áó«/Á×Ç·Ö÷¥Ÿ¡_¾ß€?Ó³«ÿ‡û€²€§šY}AŒ ð – ¥`Çàò`aˆ~ȶ»¡2¡ ¡=aİ °æ°Å No˜7 / Û¨±1wãíM2›’7]ÚÌØ¹ù\>"8¢5b%Ò;²1r1Ê-ª.jçÀ;Â{m]=cS3k[;gw(n.Þ&¾2~>Á!¡&ám¢kb}âR’wÒɤÕäàäŽRJDÊ…TñÔ¤Ôþ4…´Ü´átô¢ta†EÆáŒ¾¿9ÉܘÙ#` ÒƒYšY{²&³­³k³?æåœËËMÍÜ¢½eß–™<缟¶â¶ò¶öå+åïÊŸÜf·­a;²=j{ß•…;¦wºì<µ‹²+i×oåïwïî-”/ÜY8µÇeO[‘H¿h|¯åÞúp?$ü0´oí¾ê}_‹£‹ï””T–¬”òJïühøcÕ«ûc÷•™–;@8z`ì ÍÁSåbåyåS‡¼uUp*Š+ÞÞ|øv¥qeýÊ‘¬#Â*ϪžjÕêÕ+5ñ5£µöµuruûê–ŽF9f{¬½^¾¾¤þóñ„ã\ºÕ+ONdŸxÙÔ4ð÷§–f™æ’æ/'SO Oùêo1kii•k-kCÛ²ÚæN‡Ÿ¾ÿ³ãÏ=íºí 쎒3p&ëÌ«_"~;ëq¶ï÷\ûyµóuÌÎâ.¤kK×Bw|·°'´gø‚û…¾^ËÞÎ_õ~=yQébí%‰Ke—)— /¯^É»²x5ýêüµ¸kS}›ûž^¹þ°ß·è†Ç[7o^°¸rËêÖÅÛ·/ÜáÞé¾kz·kÐd°ó7“ß:‡L‡ºî™Ýë¹o~¿wxÝð囑kÜ|èöðîèúÑá±À±GãáãÂGÑf'?~û$ûÉòÓø‰âg¢Ï*ŸË=oü]ë÷¡©ðÒ¤ãäà ÿO§xS¯ÿÈüceºð%ýeåŒâLˬÑìÅ9ç¹û¯6¼š~þzy¾è_bÿª{£ùæüŸ¶.„,L¿å¿]ý«ôô»“ïß÷-ú,>ÿòay©ø£ôÇSŸ¸Ÿ>žYÎY!®T}ÑúÒûÕãëÄjÊêê¿B,¾½‹ Þ pHYs N NwŒ#tEXtSoftwareGPL Ghostscript 9.25Á™? =IDATxœíÝÛš£¶P{yÿWö¾ð„0œ,@€ª´ÖUÒãÚ€~Jñþ|>/ ¸ÿ=½@2èÁ???ñ~¿þ½ÿ~¿ÇwâÇt‡~òW@8[‰>Äó<íÞï÷<éײ¿e·æ–ýg©ýù|æY8Tíõ6ïBQ¶J,ÜG/ì9ÞMýù×ÓlŒû™vâ1Mô{ç@³Î>½&ø Œ»z°Øâò¯ J>Y¾4Hï÷óèµ|xžÊógÁçŸ\{Rnû3ÐsÆ•TÞªszÖD¢+¯à¤û}ïÃß“˜/¹Ý®L [÷ÝGŸ(©Ëo½ø ¤÷@¯û0n-†Œi×o@çnMôŸY>Xà3Љ¿ýÒ¾ë½Ýã…Á¯¿^5zÝz÷ðÒÆ™½ñ¦öŸŸ€Ü¦‰~`Ζê!ú³ƒ½ð3Ð…½<Ôg|î·üôÚçó²|1³¿¢mãaãâàºÇØôÒà {#ðJzÂÇ[œ füÃí{áÕ_ÓâE/d¢Ï2hb^wà$‰HtÈ@¢@2èD€ þÌgê4¨å‘¹^ÔèD€ ¦oj1),óì-l5:d Ñ ‰HtÈ@¢@2èD€ $:d Ñ ‰HtÈ@¢@2èD€ $:d Ñ ‰HtÈ@¢@2èD€ $:d Ñ ‰HtÈ@¢@2èD€ $:d Ñ ‰HtÈ@¢@2èD€ $:d Ñ ƒžÞþò~¿×þéóù¬}~㟠—Ct -߸‡ñF¯ÅùƯ¿ßï‹âÒëТ3q;Äùçó™/gøÉFgIt€TÆq¾ö¡ž’DˆêLç¹PÏG¢äQR oü¡It€N—ŒDiÞå®ÔîœD€ $:êû $:@<¦ˆaN¢@å~ ]î,’èIÈøÎIt€NßžŒDˆd»ËýØlíŠû$:@èùHt€Tö–é ô4þyzà Ik¥U:£¤é÷ ßlq§Žrÿ|>ßO¾ßïù‡½ŸöItâ9ÓÒAûæGøòï¹ð~¿×~×É’D'˜í÷M-V$KÅcØéЉN<“Fj¨EÚœð¶/ƒt~@FƉ`D' I˜¯rèD"{n¦Ë‘èD' #ã€ÎItRÑ?\‘.wˆÅÓkä!{èÉHt2ÐåN'~êóÈø~HtÂÓ9|ßjSÎ\³šÅ½ 4Uäsøõ9k¿8þ¹S&%‰Nlf‘#Ÿ,/9Ú'Ÿñf£~HtçÑÜ?h1€Ï싵×½œAéHt¢Ò‘Ì ƒÚæ¯5rõ–‰D'¤Ÿ¯ ÓBÈÍÔåzVf˜¡iï÷{ÞØ‰ó3¿ÒÉ^÷Í(¿çËŸ¯ÈS Ñ©Ñi×оŒCúûCMÏ1‹_)z|üù¤^w`„¦F'€Iœ~˜ ¾¥ÇM:KžÝ#“Ñs®˜ƒzO.МçWksêÖ6·*–gÃTp«fƒÓmõè.Lt]7@ûnn©šó¯Ép¹ômx²œª<2nï°d€G„ ?¼m¨ù k9æóùdʹ5îý‹THôv<ÐëÚ÷ˆ­eoUYèt?82Îc “Ú´pQnƒ«¸÷Ÿ·#Ñ¥8Ѓ+Úº ét³Ï8¹÷›Nt)ô¬V÷ áC}p`ï?»£î£ïý ï í:èo[TÉÒÚ\TùÒÚ\TÉÒÖÕ[³r©ˆwv[ó3óâÆùk}”œ#ç«©+ži¢Ÿ|//@Ïæá)ùz%·×ãûzÇóèo+@‹±7 ãnyoVï£ÿÌoû˜›…îºl–oµÐ±&±©.Ù3Òü!Ç”ïýæî£ý¼SÞùÒ«XØDo$;™sf,bY[4ÃŒt:Q±Ï‰ï¦GLñ±ÝsÆIw ™«Ûñ-aÖ2=zŠš¶0Ý}@W<ÝÓ³|{¿Ú›ZÖÒ=è÷t¨b{•rÈáP¦çèxŸô:$ø‹*¿{í+Á÷BƒWTú jüŬ!$ûÒ.It®ã.'‹vÌ0À.Wäë܃ù¿^'å\xiHt€Ên‹Õá•æ¼$:@ 9†¤q‰¤G¢„ÑBl·° ,’è—|ÜL¢dpÿàsÃÝ[#Ñjz6çt ôL¢$!Î;gÎ8ÂH9Q6T¡œ— :ó¿ò%ÑÂç¼$:@]7‡«YäHt€¨žsW­‘è—¸z´šêœ ‰Ïvœ_z1a\}³$:@0?ã\íÞ'Ï£Dò-‘ÊÌ©ÑÂ( rz·Ôè•}>Ÿ¡’®›¯§µ©[¦F€ Ôè@×ÜæêƒM¢ýß–ÿ÷ù÷ºŽ÷¹ú©¥îÁ6è„¡á65¸0Wñ`“è@¿Æ èÚ0réN-?·“›Dx½.H÷dïºÜëº"Ý%:ÀTõtÏê\¤VºKt °Â©ÓJÒôÌ,lk îP¦G7/ÐùæK®œ\TùÒ>ŸÏ™t—èû|›ÑíÚ}ÞÊÇ-Ós\”D´7Ý%:À>Û 7‰í4eúËô'ì:x$:XÅŒ9órÒÂ͈X¦¯ýí÷|ó9µwi»Ž·ñ‡%:À‚Z)þú»LêžÜ»M•ãM¢üQ1Åç¿4Ô¿ÂmpÕ7‰tíº.Ííÿ¦\z¼ItÂ0ÁEç®8n¸I<^f 2]û®>Þ$:ЯqÊÞ[QB]œßàŠ/V¢¿^¿®›Æ'ÞÞ“Ï/>®Zò1 ¢›O±öC]œ_çêï³÷D߸<¿ßóˆÏ,1ùÉdr‰ÅKµ:Y”s Rj9ÔÅyhÿ{z3ìÅ·äh'÷xö¾Å«Bß…8— ±ÉóÄ-ŒA›l†&(¢N½ðÀ=pL—¼Žiï2|ÊïÐÝ`²vÍTP&úàÒnáºhÖ<Ôi4Äy=&úÕ7ª@¡É»¶^÷VóžvÍWh½Œ+á.5y›ËÚÛÛ*ZöK8ã×]¢ßpý«³ØkþÍE¹.Ëë.Ñïä<vYËõñ¿cº‹HôÊèв£Àæ¹þµw Ю÷¸“€D¯&DKÝZŒ·îX¶–ëk?ܵXR’è§èÈ‚“;DÚd.šó !1‰~ŠóäN¾íÎ<æ¿>aÞ¾3¯ È/eÂ¥ü£8£Çf Ÿîýñ«ÚX½|DÑ]¢Ý®_I-t‡zLôcGožiù¶uA·Ä99¼ÿõê3Ñ_{BýûMÕ=í7Ö¨• ç`#ï&‡*úë>~pe1³K¦gÚö…kçpÛòûÀŠÖÎýµE SÐlÌE³wk³¾W/l¸B¿‰þú{J¦Â¹bÖæe,<Ö¬¨h±¸=1ûÏ>Â_\›§òðç­™>ŒXºNô¯]gr•Ó^lC nžafñÄ_ŒáׯT~•mü5N~åpõÏ#:½ðZ·g¾o­bmà.9Ht€FýŒÒ;³¶©‹éu'Œ½¯’$™K€ÇªyoÁÕ›´÷†£DoŸàI'“ò@ðÿWkEÜL¢´â©:¸Ê;[yœD²)æÊ$‹<´”ûè@*ó§Ì·‡Žßç÷gä®5Îï”»Ü G¢×tìñPà Ãé6™®qñ3¼Vž>7[\ ý”½ÝZ¸Úö´*Ú;ÉëSkœçºPB¢Që ô8ЦI'¼PoÖx¿Hôj=×±69üÞå\G¨‡#ÑKU|±ÊÆÄ“†¢@oî?ß½1’öyzí·Åw}\òÚrœBЧG®æMꞆDß²–åÕW4_¬çA¡s·µ ñ4$úª{²|{rzs`ú6­_î£/xö3ެñ%t®Ÿ`òýÆ^qäv&5úT#ŒÏ‹õG6¨eï nÛ¿8tàýÌûrk+šomR£ÿ¥‘8¯½ðRhÊF:žÈã äY›“k\œ0nm]´i:ïqÏ»m{òç5»a$àÜ‡Šž=¡ôºÿÑrjzÑ!?5Úë~s¾¶ç_å#eH¬ý¸Ù¸W ÅD_|£ß×­X”VR¨3å¸nÓb¯ûöÐÍA•uÅju¿wnãUZuÏ ¢kôWYtÕ ãöãüK¥Þ¹’‡š? ¤×h¢]—îA S6ò%ݱ‰>V1Ýs4vÊt¾¤;0MôdÅ_I+±u[+Ó“í>.â8”Zw‘ÉLénI/Y‡”ŒþƒmÁzÝÙ¨Â#èP‹1ÉŸDl?›¡Šo/hÖÐwÓoÞ7Ïwh¾ÒŸJŽmßd©F?“âU>ß2Cäº%ůÖ½zŠ'«óôšöIŠs-&zõ‡œÀ†}‘¦jÍün:]±Ó¯}ˆ¨êMU².wºå¾Æ­A‹‰þJÑ`©˜©Îlèh†™ÛÜ? ††€Žý†.÷Ç'´2î [öºefVžÒQ‰©Ñ“èaªÃ:ç€mjtÈ »DO™Ÿ¾R`Qw‰)õ’è*Wrë%Ñ 7cÝ ªñäijtÈ@¢@½$zú‡Öè\/‰Þ×.}ê.Ñ=Æ@Jƺ'ÑÃ•Ê ïÃ¥eØÖ])Iôúz(—hMG‰>ôÔ]—¸ï÷{¼ðÉÿÀuÜG¯é©Û{î/ÐQ‰µX£Ï{ªk•žŸÏG78Ü`r¢é=‚´˜èsãÖ¡JÓð~¿Ó41ºÜi_õSøŸP-&úwûÖŠiM´o£?Ì) i1ѿƧúMCŽ2ÝMšuõ) L´›èc›†¬·Òµ†´LºÃ b$úØù¦aõèezÊKÒ“îp‘ÿ½0Jήò¤ù¹´ó¡ÕCÓ°wòœº;±â¢ wPÉ+þm.ªdiÍîÄ]æÊ åy}WZß0ÜÕân9Wˆ×ë¾f-áJê˜Ðµ{èß%ë~Ú~þø f?O콷ᾄF¶¼‘ÍàŒGvâ±û&Ž7Ú÷ìQ¦F¯•âk ÔF¨Tˆ¨Öè`MÓ‰~iŠ¿þîÅê= ô# )wj1Ñ·[ºç¬PçDqçY |µ˜ès—žÿ±Bý+ÄF˜ƒ®0¾sßb¢#öÎó¿ýPw<•BØ8ß¿Òïç7þ©p9D×b¢¿ž>ÚZ u/¦$Géó§õ6¾Ïµ8ßøõ÷û½q@\yf˜9i~Ä?µ%âútòùa!‹3aO>Fý?“C¿…c]œ{•<-ÔS’èS“PðpŸtš‰s`âLç¹PÏçO¢¿ÿõìÖ4âñøÉ¾å@¡cs–iüshtdÜã&Sˆß6Šd~^‰sør.Tç] ÉHôUóᦗæº,v™·Hâ¹sý‡µ\UJÜÅ3P–°—D/²ø2Ç3ÑnÚ )­ÍÃÁ}‡µ—4Wéér.åLÜDß­î#NHªèljvA4E£ÔxÇIô œ Àt¹³ÈœqIÈøÎIt€Ny~=‰Év—û±ñ=Šû$:@èùHt /”*´·LW §ñg¬»= ДÅ<.å>¼‚eq&¸ºSYÓO¯´¥ÊĔ׿œî‡DhKŬÛ]q2è^wˆj<ÎQHtÈ@¢@202®Ô϶Ÿûœÿú0ÿƒFÃ&m‹ö¤gݤ€? ¼ö“Ùçÿdzjà€ŸíÆZñ@Ôè 'É䥋áýšTóë`[ÏÉt¦­P°õC¢W3¼alû<\ü€WYŠot nÿ\º§$Ñ/±ëî¸[éÀØF–—´“Ïœy‡±HôšÔÜÊt`¬úðùMÀÉÿÊõ4<½v““Ý@zó³ŸÏ§nû°¸@EE½¦í‹k§ °è†,ß^¸§orè—X;6ÀÄY¾½"­Stî£W³v2Ìï”»w|=>þ|>¯†¦)–ñþR£W0©¼ççƒ{WÀÄÏvãNæ¿ÊA~Ðâ¿}NÎg•q9 }jpêÖIo¢Ö)"‰~ÐácÝik0ο´NÑéu€Ñ(ÐŽ›;™'=í­Eæd“Ò·NÉn1¨ÑŸabØëŠùÉ'oZª¾ü ­eùX' Ôƒ{ÿ"=ôßЬí>«NÎçºö=â)ß[ß{ètW£_è›ÙᎠèÇä݉sÛ÷XQ1.9²¶cwîý{Ht€¢éÏ´ïá²áÕG¨]½÷o#Ñ/—ûL€|.mßcµý„ú tºKôƒÎ¿/õŠa>pX [¼­mêÏö=ôɾ6â§µ½ð”¦Ò]¢—š¾…“¹Î'–™ÿ+Ã<¼3%_'eúaìëñ!'ÑK;އßr@?Ï÷¸€svypGKtèZ ˜y¶ïúg¤m÷·§1”鎜óŽíýûIt€eÛñFZüÃ:,Ó£¤ø˜DøOÅvQ=Ý{ûÙåçñVØ3ÿç s;œ34UQ¬…PÜË÷¶«dãk5ƒ“uå(mçÅ#ß|É•Sƒ‹*_ÚÚÁSø»f˜åˆó§lBÇzAZ¦ä{ÊÞóT¢CG%hÌÞ®:ªôÕ!ÜÜX…HÊÑÕ_lë׉É4ž—o$:ÀÝ*¾n«.qšDx@k¡ÞÚöpÀÿžÞ€™Á»:qžƒà1ó ¿¿MçiHt€‡=•©²<ñÃzÝ6~¾ qž€w¯3ýŠP ßvìZãüq¸(_,‰În%³jk ¨åçñæ0«eñés³Å"Ñ)µ}V;ç©k~DE?ÆîïÙ:¶Æy® õ–Žp€©I„»¡‚D`PG¢<éþíò5êlE¢´â‘5©{ E·õr‡xs%þ$úû_Ïn @çLߦéæKЖòPÿVbU:Æ]$ Ñî°w·í_zU7â|oH¯­h¾I´É 3õm¤ca4ŽgzY\ZÉÓeåk\œ0nm]´é=Ù‹vDaÎ8ÈF¢@î£@Tã{åjtÈ@¢@2èD€ $:dPgŠàYjtÈ@¢@2èyÝ *oS€l$:d Ñ ‰HtÈàÏX÷ñ`¹ç68HHtÈ@¢@2èD€ $:dàÝkÕx5:d Ñ ‰HtÈ@¢@o/[€ÔèD€ $:d Ñ ³À@Tï÷ûûŸÏGHtÈ@¢@2èÁŸ±îÃ`¹ŸJf­¸´6U¾´6U²´6U¾´6U²´ô‹*_Z›‹*YZ›‹*_Z›‹*YZ›‹*_ÚÉE©Ñ ‰x÷d F€ $:d Ñ ‰HtÈ@¢@2èD€ $:d Ñ ‰HtÈ@¢@ÿüüÄûý^üù÷5¬ï÷_ïc¸ý÷´Nþ´ö7Öl%úxó¨{¿ßó¤_Ëþ-nê÷‡r€ˆÞ‹VRj¯åýÆu@#æÉ­X º…ûè…=ç¡co²ñŸÏ'ôŸ[#ã~†\ÄœÜø€¦‰Þ~Ÿùu:ü“HãìÓkáR0Ü@‰¿Æº_=X}qù?‡æ­}²|iÞïçÑkY|6ìûÜbToŒE/ü̱-€ˆbÌWRyתÎUùDÔD¢·S‹s‚º/Ñ÷>ó]2ëKÅ™aÚ¹ª€î»>Q’ %Ó²V™ºÕü¯D÷@¯û0n-AŒi?_a‹sB»5Ñfù`qHüÏn•8 º¿ýÒ`ÛÛ³]üçûÛÅ9 ¬ÖèuGŠ^Ú8³7ÞÔþó3k[%ÎÈašèæl©>Jüg{ág~®eãW } –…½<Ôg| ágœGü£èÙòÓkŸÏgÈòÅx;üжK„­ûÛ÷“ªp2ùQŒnÄ^IOøøc‹³ÁŒ¸}/¼ÖkZJ‚\@8º— ƒ&æuN’èÁÿÉÖ—í >ÚIEND®B`‚queueing/doc/queueing.texi0000664000175000017500000001424513356127450015560 0ustar morenomoreno% Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2018 Moreno Marzolla % % This file is part of the queueing package. % % The queueing package is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 3 of the License, or (at % your option) any later version. % % The queueing package is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License % along with the queueing package; see the file COPYING. If not, see % . % This info file is taken from the GNU Octave info file \input texinfo @setfilename queueing.info @c The following macro is used for the on-line help system, but we don't @c want lots of `See also: foo, bar, and baz' strings cluttering the @c printed manual (that information should be in the supporting text for @c each group of functions and variables). @macro seealso {args} @iftex @vskip 2pt @end iftex @ifnottex @sp 1 @end ifnottex @noindent @strong{See also:} \args\. @end macro @c @macro examplefile{file} @c @example @c @group @c @verbatiminclude @value{top_srcdir}/examples/\file\ @c @end group @c @end example @c @end macro @c @macro GETHELP{file} @c @end macro @c @macro GETDEMO{file,n} @c @end macro @c FIXME: The following macros are workaround to fix erratic behavior of texinfo @iftex @macro lambdack @lambda_{c,k} @end macro @end iftex @ifnottex @macro lambda lambda @end macro @macro lambdack lambda_@{c, k@} @end macro @end ifnottex @ifinfo @format START-INFO-DIR-ENTRY * queueing: (octave). Queueing Networks and Markov chains analysis package. END-INFO-DIR-ENTRY @end format @end ifinfo @c Settings for printing on 8-1/2 by 11 inch paper: @c ----------------------------------------------- @setchapternewpage odd @c Settings for small book format: @c ------------------------------ @ignore @smallbook @setchapternewpage odd @finalout @iftex @cropmarks @end iftex @end ignore @defindex op @c Things like the Octave version number are defined in conf.texi. @c This file doesn't include a chapter, so it must not be included @c if you want to run the Emacs function texinfo-multiple-files-update. @include conf.texi @settitle queueing @documentdescription User manual for queueing, a GNU Octave package for queueing networks and Markov chains analysis. This package supports single-station queueing systems, queueing networks and Markov chains. The queueing package implements, among others, the Mean Value Analysis (MVA) and convolution algorithms for steady-state analysis of product-form queueing networks. Transient and steady-state analysis of Markov chains is also implemented. @end documentdescription @ifnottex Copyright @copyright{} 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2018 Moreno Marzolla. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions. @end ifnottex @titlepage @title The Octave Queueing Package @subtitle User's Guide, Edition 1 for release @value{VERSION} @subtitle @value{VERSIONDATE} @author Moreno Marzolla @page @vskip 0pt plus 1filll Copyright @copyright{} 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2018 Moreno Marzolla (@email{moreno.marzolla@@unibo.it}). This is the first edition of the Queueing package documentation, and is consistent with version @value{VERSION} of the package. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions. Portions of this document have been adapted from the @code{octave} manual, Copyright @copyright{} John W. Eaton. @end titlepage @contents @ifnottex @node Top @top This manual documents how to install and run the Queueing package. It corresponds to version @value{VERSION} of the package. @end ifnottex @c ------------------------------------------------------------------------ @menu * Summary:: * Installation and Getting Started:: Installation of the queueing package. * Markov Chains:: Functions for Markov chains analysis. * Single Station Queueing Systems:: Functions for single-station queueing systems. * Queueing Networks:: Functions for queueing networks analysis. * References:: References. * Copying:: The GNU General Public License. * Concept Index:: An item for each concept. * Function Index:: An item for each function. @end menu @c ------------------------------------------------------------------------ @include summary.texi @include installation.texi @include markovchains.texi @include singlestation.texi @include queueingnetworks.texi @include references.texi @c @c Appendix starts here @c @include gpl.texi @c @c INDEX @c @node Concept Index @unnumbered Concept Index @printindex cp @node Function Index @unnumbered Function Index @printindex fn @bye queueing/doc/qn_closed_multi_cs.fig0000664000175000017500000000471512762046576017412 0ustar morenomoreno#FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6570 5580 180 180 6570 5580 6750 5580 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4770 5130 180 180 4770 5130 4950 5130 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6570 4680 180 180 6570 4680 6750 4680 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 6750 4590 7200 4590 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 6750 5490 7200 5490 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 5 0 0 1.00 60.00 120.00 7200 5490 7200 4140 4230 4140 4230 5040 4590 5040 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 4950 5220 6120 5220 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 6120 5220 6120 4770 6390 4770 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 6120 5220 6120 5670 6390 5670 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 4950 5040 5850 5040 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 5850 5040 5850 4590 6390 4590 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 5850 5040 5850 5490 6390 5490 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 6750 4770 7380 4770 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 6750 5670 7380 5670 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 5 0 0 1.00 60.00 120.00 7380 4770 7380 6120 4230 6120 4230 5220 4590 5220 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 5310 5220 5310 4590 4230 4590 2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 3 0 0 1.00 60.00 120.00 5130 5040 5130 5670 4230 5670 4 0 0 50 -1 0 10 0.0000 4 105 75 6525 5625 3\001 4 0 0 50 -1 0 10 0.0000 4 105 75 4725 5175 1\001 4 0 0 50 -1 0 10 0.0000 4 105 75 6525 4725 2\001 4 0 0 50 -1 0 10 0.0000 4 105 120 6165 4950 .3\001 4 0 0 50 -1 0 10 0.0000 4 105 120 5805 4545 .7\001 4 0 0 50 -1 0 10 0.0000 4 105 120 5805 5670 .2\001 4 0 0 50 -1 0 10 0.0000 4 105 120 6075 5850 .5\001 4 0 0 50 -1 0 10 0.0000 4 105 120 5265 4545 .2\001 4 0 0 50 -1 0 10 0.0000 4 105 120 5085 5850 .1\001 4 0 0 50 -1 0 10 0.0000 4 105 450 4230 4095 Class 1\001 4 0 0 50 -1 0 10 0.0000 4 105 450 4230 6300 Class 2\001 4 0 0 50 -1 0 10 0.0000 4 105 315 4590 4905 CPU\001 4 0 0 50 -1 0 10 0.0000 4 105 210 6480 5355 I/O\001 4 0 0 50 -1 0 10 0.0000 4 105 210 6480 4455 I/O\001 4 0 0 50 -1 0 10 0.0000 4 105 165 4680 5490 PS\001 4 0 0 50 -1 0 10 0.0000 4 105 360 6390 4995 FCFS\001 4 0 0 50 -1 0 10 0.0000 4 105 360 6390 5895 FCFS\001 queueing/doc/qn_closed_multi_cs.pdf0000664000175000017500000001430513356152314017376 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ•XM7½ûWøDZ¯¿?®A!Š„Ø”C”(š{ÈßÏkÛe×ôL÷$â°øÙUõêÙ®rÏ7©•‘zù×ÿŸÄýC’_ž…WÉzä?¢ÎˇŸ… %ªl¥N™åÓD´VÁi‚JGé|Q)%i|vʇ1> ã­VÙÍ.éÅbx q‹Ž`á$y)6‹ƒÆ°è,ÆŠÎrxXåq_Å£XFZ{™`Cv„D(œŒUÐDFç”m)D(Ô‡GasÂúL€u±-ïæ4¦0èHÖ¥tûJ5 4> b@1ìÖ)´Ä(]£„LlÛJLÊû¹mÅÀ.ç!)ç¶}S†‡>¦sÛŒ.&cÛŒñÕ7Å ñܶ±bðîVy´ì¾ÕóiµÑ‹K-¿&( v¹žÓœqÜÜ@N1:¨X²ÚCr,*àÔêU:[3<¿ý ÿfª·¥•„V63ãGñþ*ÙÍ ƒÈnÞw©Çò&dæ\V8&Ìù.Ò)STö™¯žWyÓÒ™÷4æys²›A‘ëy㞘”½òz‘ÐzèTÌ@NÉÖ*SÊâ¼[í!#8Xi§œlÍôLy¯²dû½Ük°´(Ÿ" Î%2Ìš@HUë2ÅMj“þuµŒqBÆd”¶Ux‹òáý@NI:/{yF{²øS,_2Ýv©~—.©T¼üÜ>±2Û,AôQߘ¯ªÁ%ñ͘ƒÖu ,jšO P³n•K8z†€ÓPzlj’t›=Ä¡.;ÔÍ„=I¯!Ç×%X'<%`®¨ä¤Šr™Ê&‡ÁsW‡.¥S< ”‹\‚]¤±U>¶f8þ¿¢0Wãù@…¥²Åaò¼*JA+Š&±{‡îW‘Bæ½#«=Äh Ëïï:ÖÐevù¶t!a!„Y‰kd·‚Ü*]Ö•úæ³JÈldµ‡ô­`Ýmk–ÔU–3of<žgMõ ýͰ7šj_ÆúTÏ›5UBfÃ$«=¤Sbýnë?(ÁŒé|Þf¯Ðß {£ÍPRf©±t «š˜‘lv‘lÁW¬óH›‚ž±Ý¹<âE\߉x£Föe£°PÆ£”Àê_·ÙG!VŸÎ#Ý’€ §«Š¸&¾ñFE¤WÆìÂô´š}~<¿Æã€ž/›=gX+_Ú”`µçScQ7å¯ dÆ›ŸkgŽËt7™î?:Jýøô£Þ< \Wœ5ïøÃža£ËW&'^ßÖñ¶ô[òÀåŸ]¶Ì©wVc/óÙá0xîJCGK3ãÄÆ¥ Ãm€8Ís¾6tY~.€+²„0ã.Åùíºä¿v0{ì?¬|ÿILûÿs|’?ÄýC–Ë+<yøS´ßgÐúp·–7>‘3>ñOâ¥{uøKÜ-/_‡ãg³r•þðI¼4ËÌùDª¶šà ¶îÎxe’mSʱ9X-átiSi™B›É…âðˆ}õŸixž$7F9—[hª›°\ÜT«m›±/§"ïø”iFNå°\`£UðÖëÓÇçgÙBŸÊÅU ^XP2Ð7'TàjôîCS ( Ñî¸6¿ÜÿºÌib-V ZÞÅ€W’oÙ¿{¬¾P%„w;¬›Ù›×oêyzÛ¡â§ŽÇ{ñ/ðÖUendstream endobj 6 0 obj 1272 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœT{PSW¿—{O-K-Ù()˜0U×VK׊vñA©V@ÊC*j ~4)ÌiØç@º a˜%Þ~5í9tðhãø¨êd¿°+µNÖøp¦¯C š@•6üç%‰rùH£ µ¾jj—0‘œ0^0™:Œ¹è-Ô¹m •8ƒÖsW:²‰]ÍéÒý`åÒ°#_ë§Ùèb#ég¢j 3¥£äcÃ9ªæ}Hßœg¡ßkq¹víšZËB÷Ñ=~ ZÇÕºBÝ™bX óKµåŠ Ey&¾¡‘ûúN<9*šHéΪτi‚¸TYT€Ä¶¤æ2[Ï檲ÒxQÕ°FßR xCÅím%·¯ïLLd^<Ü#b°Ïeõ+l t¶_Hñn:£EhYv°àˆ\â4¬A#Ä®RªV? è²ô«³5 &ÐÈŒd“OtÕùÆ=`%„4øåi}ΰBòÇC'hW«ËÍôÖ#–|—¯¦òtEµvŠ$á¨î¼Æªì‰o ÀsoL ¢1Ëjm²4—Ê f‘¾ÒPÍ ½«¹ÿj{z„0˜d<ƒs âÅÊ,*¦°líq·ìM£·„¼³GʲÜ.Á¦šn¼øPªÓªòäTF¡ ‰ìÒeQiœ´ÛÐ+Ày9‘ê¡ÿ݃_B½ôby'Ÿ cÜ™õL¬g—×PÑDàÓ“ßA€¢‘;¡ØŸÓÃ?~éÓ³‚$Ça8œÓ“z#¦Ó2¯Â¼Ud\-W($’Øœ#ð8ŒmHêŒNù"\êøqð è»|µy þ‘¤¦~4Ò‹?_B¹çœ[^ËŸ-¬,0îû= E~E¿Ä—UÜ0 ÐGd›¾ÞÐçáõªËÖÉ®ž[ð.¤lçOØ·wxBÀÔ(ØŸßn6·#·ÛÇ6l‰fÈ,ÊXª²€TÒB3É—‹ˆúe-ï:Œ%¬"xîÊmžÚ-ªËÔ€w±61±"Å-Æ©SÒ%i9 0þ͆C¦OŽžhWž.WA98}|ŸwÐrŽ*ˆ Œ„ÛLð5µunÕ°¾¤±ˆí¤± ö¹!ðÝü¯Ã?g\§EoŽ'Øáì½=4˜Ô-ìL­=u.„ý%/ý°Ó´ÿu ½°sØ ¸™Ïh²‰‡ºº¬Ò €i!á‡Åbµ4ãè¡´=ÐÆX3®ätõÂ;ÍÆ™ªªoÌl{²Éùâª|ã^À|A2{íB»þU÷ý>¡u°r>¨–,ýWuí£JàŒ:¡ÿé[NÓ¤­#MÚ*ÃM@ÿ@–”Få&jýÕ‚Ü¿“ÕÆc]UÔ1ÑÊ)ÒAQA%¬gØð|?é‚Ì‹§×ò¾DžhÿlÑ·ÜQØÂ`Øvh¯,ËlM¦7¨Íj6ôJ%¹¬œš›oøTte uÞƒ£¹Ã²NUsvM|#à=¹¥µ÷ÆÇÞŽS§& ¥2\u¸®Äµv¨ëwíñ‡’4ù)‘”-}˜ùÛ;zéñyÑStþ†¢ˆzh2š*lO] Ìš¬‚b%0b‚Á™|ƒ ^P\¦¯èê+:=(Ddâh0ܶÞ㛕kn– S­ÊJ2*O.Μ[˜n¿vM44Ô4çàtöpÌHœ=´…YÕÄŠgbÁ -ôÌ,N¿ôj… B˜Mõ…÷ÏÞ4 ”`bVžq¿ dùM.{]‹8øâpÐëÏùR¹<5½U~¾³Íz¡óT›TÄzAY–…ì¤égCy€`r^pï,;€V³ÇÉ‹´j :_Gì†êjç€þ‘,,elåRd_Õ\ AS¥&U´MêÕ”Ÿá¥6pŽn™ÅÑ÷‹Z†ÖñO—'~¬-:f0…òEþOŸõÍÁ¯Ï߸>ÛDLó17~ƒt¦jé#U(¶–°­ZxÕfrrš/sú†ýØžÌ endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001587 00000 n 0000005785 00000 n 0000001528 00000 n 0000001377 00000 n 0000000015 00000 n 0000001357 00000 n 0000001652 00000 n 0000001753 00000 n 0000002112 00000 n 0000001693 00000 n 0000001723 00000 n 0000002407 00000 n 0000004364 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<8C6C1449293E83E5F4E29785A5B07784><8C6C1449293E83E5F4E29785A5B07784>] >> startxref 5908 %%EOF queueing/doc/qn_closed_multi.png0000664000175000017500000002272113356152303016723 0ustar morenomoreno‰PNG  IHDR<8 7iCCPdefault_rgb.iccxœ•‘gP”‡†Ï÷}Û ì²tXz“*eé½I¯¢Kï,K±!b"Šˆ4E €£R$VD±° Y$(×`QA¹?rgâÜ;þ¸Ï¯gÞyçœ3s(¢¨(@Jª€ïçbÏ ãÀ7Dò2Óí||<á»|àî÷;ß…“É€Èç¥óH.hæÒÈq`E%¥ óÀ⇄† ·€÷·O+êo_?ÀÏÅhqßxÔ7þŸ½Êv|ABlL.Ç?-VÉádú¹ØsÜ8>ü´Ø„ä˜oþ¿ÊßA“+pHKßÂOˆ‹pþg¨‘¡!üó‹w¾€ÂüïÿÀ7½´Fî"vàŸ,ª {€Ô“2ÕãŒB€®{¼,~öß` ¤AT@tÁÌÀlÁ ÜÁ 6â!øù° Š Àa¨zh‚h‡³Ð áÜ„»pFá)a^Ã|€eAˆa"Òˆ"¢†è F±FœOÄ E"8$ÉBò‘ÝH RŽÔ H ò r¹†ÜF†‘ÇÈ$2‡ü…|F1”†²PyTÕG¹¨ê Ñ84ÍC ÑýhÚˆžF»Ðkè]t¢¯ÑE 0*ÆÆ”0]Œ‹9`ÞX‹ñ±íX1V‰5bíX/6€=À„Ø<ö GÀ1qœ.ÎçŠ Äñp¸í¸R\ î® ×{€›Ä-à¾âéx9¼Þï†ÁÇásðEøJ|3¾?ŠŸÆ l‚ÁŒàJ%$¶J G „«„aÂa‘H$JuˆVDob$Q@,"VO¯GˆÓÄ$*I‘dDr&…‘RI¤JR+é2i„4CZ&‹’ÕÈdor4y ¹ŒÜDî%ß#O“—)b Š%€’HÙE©¢´SnP&(ï¨Tª2ÕœêKM î¤VQÏPoQ'©Ÿhâ4mš-œ–EÛO;I»J{L{G§ÓÕé¶ô0º€¾ŸÞB¿NNÿ(ÂÑq‰Ù!R+Ò%2"ò†Af¨1ì›yŒJÆ9Æ=Ƽ(YT]ÔA4Rt»h­èÑqÑE1¦˜¡˜·XŠX©X«Øm±Yq¢¸º¸“x´x¡ø ñëâSLŒ©Ât`ò˜»™MÌÌi¥Árc%²JX?³†X âÆA¹µ—$„lŒ­Îvc'³ËØgÙcìÏ’ò’v’1’û$Û%G$—¤d¥l¥b¤Š¥:¤F¥>Ks¤¤“¤JwK?“ÁÉhËøÊäÈ“¹!3/Ë’µ”åÉËž•}"‡ÊiËùÉm•;!7(·(¯ ï"Ÿ._-]~^­`«¨P¡pYaN‘©h­˜ X¡xEñG‚cÇIæTqú9 JrJ®JYJ JCJËÊÊÊÊÊÏT(*\•X• •>•UEU/Õ|Õ6Õ'jd5®Z¼Úµµ%u õ`õ½êÝê³RnymštMÍ ÍF͇Z-®V’ÖQ­ûÚ¨¶‰v¼v­ö=TÇT'Aç¨Îðüó5©k׌ëÒtít³uÛt'õØzžzzÝzoôUõÃôêè501H6h2xj(nènX`Økø—‘¶ϨÖèáZúZçµ;Öö¬}k¬cc|Ìø‘ ÓÄËd¯IŸÉS3S¾i»éœ™ªY„YÙ8—Åõá–ro™ãÍíÍw˜_4ÿdaj!°8kñ§¥®e’e«åì:u1ëšÖMY)[EZ5X ­9ÖÖÇ­…6J6‘66/lUl£m›mgì´ìíNÛ½±7°çÛwÚ/9X8ls¸êˆ9º8;9‰;:Õ8=wVvŽsns^p1qÙêrÕïêázÐuÜMÞçÖâ¶ànæ¾Í½ßƒæáïQãñÂSÛ“ïÙë…z¹{òšX¯¶>u}·7x»yò~æ£á“áó«/Á×Ç·Ö÷¥Ÿ¡_¾ß€?Ó³«ÿ‡û€²€§šY}AŒ ð – ¥`Çàò`aˆ~ȶ»¡2¡ ¡=aİ °æ°Å No˜7 / Û¨±1wãíM2›’7]ÚÌØ¹ù\>"8¢5b%Ò;²1r1Ê-ª.jçÀ;Â{m]=cS3k[;gw(n.Þ&¾2~>Á!¡&ám¢kb}âR’wÒɤÕäàäŽRJDÊ…TñÔ¤Ôþ4…´Ü´átô¢ta†EÆáŒ¾¿9ÉܘÙ#` ÒƒYšY{²&³­³k³?æåœËËMÍÜ¢½eß–™<缟¶â¶ò¶öå+åïÊŸÜf·­a;²=j{ß•…;¦wºì<µ‹²+i×oåïwïî-”/ÜY8µÇeO[‘H¿h|¯åÞúp?$ü0´oí¾ê}_‹£‹ï””T–¬”òJïühøcÕ«ûc÷•™–;@8z`ì ÍÁSåbåyåS‡¼uUp*Š+ÞÞ|øv¥qeýÊ‘¬#Â*ϪžjÕêÕ+5ñ5£µöµuruûê–ŽF9f{¬½^¾¾¤þóñ„ã\ºÕ+ONdŸxÙÔ4ð÷§–f™æ’æ/'SO Oùêo1kii•k-kCÛ²ÚæN‡Ÿ¾ÿ³ãÏ=íºí 쎒3p&ëÌ«_"~;ëq¶ï÷\ûyµóuÌÎâ.¤kK×Bw|·°'´gø‚û…¾^ËÞÎ_õ~=yQébí%‰Ke—)— /¯^É»²x5ýêüµ¸kS}›ûž^¹þ°ß·è†Ç[7o^°¸rËêÖÅÛ·/ÜáÞé¾kz·kÐd°ó7“ß:‡L‡ºî™Ýë¹o~¿wxÝð囑kÜ|èöðîèúÑá±À±GãáãÂGÑf'?~û$ûÉòÓø‰âg¢Ï*ŸË=oü]ë÷¡©ðÒ¤ãäà ÿO§xS¯ÿÈüceºð%ýeåŒâLˬÑìÅ9ç¹û¯6¼š~þzy¾è_bÿª{£ùæüŸ¶.„,L¿å¿]ý«ôô»“ïß÷-ú,>ÿòay©ø£ôÇSŸ¸Ÿ>žYÎY!®T}ÑúÒûÕãëÄjÊêê¿B,¾½‹ Þ pHYs N NwŒ#tEXtSoftwareGPL Ghostscript 9.25Á™? IDATxœíÝÝ–¢X³@Q<£Þÿ•9tñQ€È?DÄœWÝY¦‰¨,7láÓ¶müßÓ k‰aˆaˆaˆk}>Ÿ§¨îÏÓ ÀM–“ÓO"ý|>à ¥‰CÕ=4³g!ÑÊožÑfºû×Ù8uË×­|ê­Ì–s5üáìv¼û§LÝJó@ ,ÑJk¸þ¹,S™ ÷‚>»$À>&bðGw€÷­œ6 ³vÜ࢕оb¼Ÿh†‰ücßÈlaòáúÛû•M7r­lnž×ÿ¹éW’GßSýëì×ÅÞHÏîAö›-V³8³|Óy(œ´­Ìmî7-j ÇœK´xÀ¦ý{v=Ñb¿ö¯¿;MѦ‰[P“heöÔeåß5Þ¶-Nóùka4¸P£M7*­lÙoÖ·jÍÞÂé j´éÆ@z¢Å!}B¶Nÿ›­Ññ¹‰Vr—nÜ¿}Ok¥i–wúŠ1 Z ½yfIƒÀ¢•ßÖÉsÿ–ùf1°’hå´{OÚòÜ¿ëè°†h¥µµ[?g«/ÜÿèΗÿÖì¿.Ÿ0wåôœå=³¶m‡Û÷oÓü–çSìØ[8ü»›&kÜ?Þzjd ìã[ÂÏðlÍÕ·ó¸oýùò2lºñOûVð*¢U‘K~A‰a˜ˆ@¢@¢@¢@¢@¢@¦¼BÛ¶FZ„!Z„ñÏ sí*àm†'5Ò Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Œ?O/p‚Ïçóô"ܤmÛ§á¶®öW-|P¢°ÖÁÓ_—±­D à‡ë²ý=«×J¢¤ßäÝ¿ÿsù/Yá³÷¬^+‰Àÿ\תÙ;™þ9õZ&ZMó=W—Æ£¿óoõ’®Ñª›ÍÕ͵øV/é- ´·Íè›­—tõD (êm¹iÛÖ¨kJ´€r^ž«^·TÓt½siï!Z@-£¼?ÓtUr‰PE¸\ ͦ+ÖC8…æ%„.Vo´ØuÎ9Ù- ¿Åê´m»üõäÜD Hn¸Ymñãu«NºD ÈlT¬—ät5wŠÓhü‘¬X‚Ý- ¡L±–U;Ä%Z@r‰‹Õ«Ó-ѲI¿WpV‘n‰JÍbu*<^Ñò¨\¬‘¬ƒ-Ñ’P¬¦ÀNBÑ2P¬^în‰JñbuwK´€ð’m—O‘5Þ¢ÄfÇàO™¢.Z@Š5’r'¡h¥Ù_$_ÈE È ßÖùt9/Z@TýVX±$[9¢PE‚Á–h!f­—i‰@!Ñ[¢Äc˜µUš%Z%ôÝ =Ø- ìÊD €0D  Š{E ˆÄ¾ÁâD €0D  è{ÿ<½›=µoðÛ†¾[žÏçc§åÕD à·o—šì~tÔ‘݃ŒÆRmÛ†]…ÞC(Z@0÷Gâç”ÅpÝŠK´N [÷-€ÓDÜá‹h”w\(Zk-¤â– Ñ‚»ÙƒtÄãaHÖ­p¯FßÓ‚|ûÒïÔ¶íð)ëþÛ÷Ñ‚[M?Ø X£n5ÒõÑ‚[-¯SÀÞlÚ­Æ©›n'ZðŒé©€Fì…¾u«ñÝE´àyHnÜÑÏ ¹î!ZðÕ;'V Ø̦+h·Þù:ÿÆ”wì3ðô²T4M”'âj¢ól}X#âÐ*4»ᇷ]opÈó fggëU$Zð"BõBkŽT »õíö£'×ó¸hÁŒŸ×Oºâo-°‹ÎDù³ˆ<@¨bÙ4-ðÛ쌟_l` Ñ‚±K‡YÉN·ZÇr·žÖÙU¿;1è,ù‰ÜjzÐÞ6+Š•·Vþ}D îf×l·ö Í£Ï9|ŠhÁ?Á÷ïOëêÒŸã[i¾-ÕË_H/_¼)Ñø¡ß²O'SìÞè›=¸hÁÿf±^èIÜ=“NãðŒÐÙ{ŠhÜ-î@çq¢ÿ±o0Šè[ü÷ÍzÃ2l%Zw{¶¡«/ZÐ4†YÜÅ)0- ž cÅ:N´îð’bEß© ZþmÌû-+è¨ñ)¾\ Dñüèý?½ iQa—úÙª;_x ^íFZŠ›‡w2Ò‚é3`‡Û&9V—hQZ‚½%°UèW»hñlm•fE‰ufQPôW»h!l­—i‰^¦ò¥¢³Ñ¢,ûðÜ­‘¬è¢dlÓ|…-*2ÌJÃ3¸,ßK]´€$ ¶FR®ÑbŽ!Rn¦÷®Š4ìF´((ßt«Ñ2ðd(ë0«-ª1̪ ø`+q±ÑÒ°“°É^¬F´€LŠw+}±Ñ¢û+(Þ­NâW¸hÙìÖçó)òHE‹* ³J)Õ­ÑÌý - §"Ý*U¬F´€ÄÒw«Z±Ñ¢ûËu+SºFs‹¼¶E Hn´5OЭQ}‹äª#Zäg˜E¦nÜ%8$Z@ £hAw/VÓ4ž^€û´m;ÜîwÿbÓ/W#-’³o‘é+áåC®é °ò‹ÙH (§Ûè¿È5­éÛ–ð~¢Ef†Y,xsºäêÑJû–®æ¡NÈÕ2јIWsc½ª)Öˆh‘–}ƒl5›®æ²×Òò¯ÛY¢ð¾ õÝr¥ŸÓ…ê'Ñ:“ÏMïQm˜õòIÛA-Ôkùç»ÿ?‰ÖN;^¬³¿âÅ ï÷³^ï–õDk›Ó?ÏV@h³ïÓ5›oð³|†'5±ZgûŠôú¾—4de¤õÕE¨ÖœmÚ6`–hÍø–«+²|eÕ÷|??ɇÄDëÏΕøv°Wº:¢õŸW:e¶^Ò ZïÊÕÈèÚ?týbß äVúzZ³—.}ÛÆnt¹ÕŽo’5Õi½?WCo¾†Â{fAzEGZÓˆ…ØÌM—Ó (¥ÜH+ÁU«G£®ÏçñQìPk¤• X½Ñ¼ ¹ìä:ç¾Å¼[(4ÒÊT¬Îhn¡!ÅmŠÁŽS¯|‹Ûª²Gµ«DkørÉô4ëVÇ0‹æû%Ÿ½*ñì"½çÞÂ)­¬Åê8ÄC£OrýÛáÛ$¦õC–ãg=Ø›â¹êä?¦•»X½ås#£¹¸ ïšö¯[–kÉ{–äAÉ£U¤X²Ý²oÝʾkâÊ­RÅêxÂVÞ5±¤VÁbuª½ ³8W…wMh9£U¶XjÝ‚ƒ n%âJ8{°x±:à TæÂA?ôG®{çUgH­^ñ§|zY“|ìä ý缕ï ÙIóëß}£¿åż,ÛîÁô›é}¬X6›Š5óËO<3…éìk¤Š–ƒ#¹nùdÊ=ö½À6&Ê>üõòDK±fåî¼Äî7WÙSî–'Z=Oÿˆ7Øq]YÅÚ!I´Œ!VJ³¢ìä…6½¿kŸ$Ñêy̲Zà"ÓIƒkÒ5:]/ëeˆ–g}“«Ë0‹Ó9(>½ýÏt9ؼ[†hõlÂX9pÙÙêë»ÅzFë3pé_éþÃ+à§³.ê‰Ù’LÓµ²[Þ’ëÝ4Òº'`Tàc §;²]Ú1iðôe(å݃'Ìök+Ÿì`䊯x®¿·¶ºð܃kžŒ#/OpA>¦p®ëNJ°þäŸNo½ÉM'̽4`žãMúwˆ·•6DGÞ ³o¥MŸª+œÞú,œåýêPÙh«2,Êìgåy+öÙ±ùÚô¥ã‚=?± ?¼jÏÙq£UèÐñŒ3këàæÈ®9<¼þ6k.©õóÑy_‹VãÚ3'®ÀX/€Æ“…Eº¤M—Ôö§yt+`ÀûV2ÅñŽ‡Ê¾ÁSX@87íL6¢Z>jZp>À=.ŒV²Pu¾ÍÅï¿ùôÀ2”q÷DŒã¡zÉN­Ñ_8wÜ·ŒpîˆVš âÏ^Fœ>ÈMç¬C·®“ê"ï¡[Wˆ­šÃ¸ÓY@,Q£õ,WÑxD°h½g·[²n½gÅ,­gRtÊÅ—XO´¶™½Ô›tÜC´6›Ýõ§[7­=¾uKº.%Z;µmkÈp3Ñ:d6]ºpÑ:nÜC´Îî‹Y‰Öi¶vËh `+ÑZkMc¦—…üvWаƒhݪ˕}‰ûˆÖ›†G³eú6Q€5Dk›ånÙép©`ÑzÃ0eëÁ­Â-0PS°h½Äl·ú ÀEþ<½a´mÛÏ¡X˜þ«Xög±DÖ#sðú¿8Ú«UAEÖ{ÈÀm.ŒÖhד;Ý7Ò6ìHÀºcKg,QufŽá\8{paSøØ}ÿÒP͵#­5çâ;k@z÷í0zþä­ûN0ýxÌã壯@ ¦?Í–í×ÊÃHk¶ƒ›ŽH]jýsqÖ+dÍ]-Ü›×”å4NO2—`“0Ñjÿêÿ·ûpÛýÑœÉG–ß¾A ¨ÏðkO7oÂ~n¯——Ç–w·¸«.î’§¸û4NCÅqáÆ¦½;FZ×…Êç´èËqß¹GÎÝâ—Gë¶‹ÁÖO9ïY†Ê®=aî Û›°¬4 ¨0ßÓZ#ÇHâ"V@†h7lbuqeˆÖñÄ,ÓÄ’D˶xi¤šqg<1ËjÒH2Ò1¶èY@&©¢µæâÈ¥¸Lªh5º5 X@>©Žiõl¯ë¬Gì ”l#­ŽíWϪ2É­¡‚; K=ä¸×°vH­²·êì J­¦d· È-çDŒ¡Q®²>Þ"óÓ1 ˆÌ#­Îh+–rÈU¼X@ù£Õdï–b5¦c@š»Vº‡Ö?Ò4—9v (¥ÄH«—lj†bÕÔŠV3éVÐt–\±{¡†rÑjæqÚÌM—V±€:*F«™Ûп?]³K¨XCÖ¤÷iÛ¶ÂDŒo¢d Êr\êÏÓ ð°Ñ¬Âþ¿ß“¹èUVçé’+€ÑúŸoéþëÕ¾W“+€F´¦¦éê\zäoaˆ\ôDkÞ—~N¬—Vl"Z?¬©×èö³Ç¢VΧ×*öyù6Nôæ÷È·mÂýK’˜h­µò„ ³ÿúsƒâe á¬ü `FÕ¹’œ7öAû>áZíœËHëW¬d›‚­D àÁs Ü·¿>u¶ÆkØ=Hri.CÃÍΚ'5{ãåã^± D‹Ìêì4ã,÷Ìé]>F®^ D‹ü ¶X㑯ö/_äÏKwJ´€ê^2Áovøõ†SÊ½ŠŒ“œ=-9\ô<¾$W³Þ¼l2Ò*zÞy"ïǽ$PÙû‹ÕkÛ6ôÅÖO'Z$·òT&1ÝâO«ðB³[dI'Z@sÕ›r=µ0-ò3Ø¢™+ÖSKrÄ(]_ÒÓ«€ì륆ލ6;ÃìÁ¦ùõieø9}Çgöõ'qÙý+u^¯°UŽÖÔè‚Gu¾†ü>ò"yhùýsŠÑ쯯¿¦ÎŽ·S²Œwªü:O`ßÓ—µX½ôpªîHkÍ“½¡þËa[¯¿8äôW*¼:Og¥•Raƒ>ÚFUoˆ1¯,?ÍG^fû¼Gú73C›ÞãÑ•ššQ4Z[Ø-àj÷¢×éVÅhí{AyéC&¥Þ¶EºU.ZKüb‚7¨ü«Ð­rÑz\©~p³Ç?•>.ý£­ Ò¿ 4ÅI9ت­”O!Ð(Ö@¢õï%¸šwÙHânÕÖ=¯ìd/x9ÅêeíVÝ3b\­Â·ñá 2m‘ϵãœ;ï÷§±==Ïú³ò8§"ÌÇS¹ ͞ꎴ®x s¼& >–ålÕ=¦PJŽzÕŠ–Ïbô\Î8ì5’­œZÑÒðic‡+­t´<a°•C²‘Ä2­¢rÑÊôäAY>gl•æ#Z¹hl}þN¾÷ETz¡ã½PMÅhí¾šðÕ_tX³$Ñ?%½MšŸ¥x²öÉñj¯­f{·>ŸÏuÅZ¶•î_}´„Ž÷BAE£ÕÌuk6ýÏgßg}`ukz·Ë‹Á9>~BŸá÷¥knnªväjߚܷ$Wü-Âð9òîˆè¯öº§qêÍî*üùt^ñ|O÷}UÁu ˆ‹­±—tâ%‹Q„µ QÔ=¦PPôƒ¸FZ@û´Æ}*ß°Jw0Ò‚óýüò¦XD£ñVÇ©›n&Zp¡5—¥°@¾u«ñÜÝÅg˜wéΓ5‡Í¼7‡Þ¶/+Á®Â·­Ò•D æ-ŸÏ{ßïÎÞ•€­ñÎ-ìô¹{Õâ-Û4áèô—ý¾»jÛÖ”w˜wÛÖ§øvsèßiú”yŽ®æ˜¼‚ ‡AÍåâ:¢_íîÄÊ_ª¢w묗ى/×Ñ] W¯hÁ­„*œ5“Ú‡ÝúvûÑSï‰ÞG´àrB…‰òg-¸„Pe²éij³3öw±ÉŸæ­sI!®#Óåy§ån-Dhö£{‘\K¨ÒXypëçOØj¸E Îg;•Õl·ì¬º“h‘Ü‚ÚnW^ú’Söý¾gÆ–aÑø¡ß²OÏ€|õ—ù-€=^kíÙkšÄâ܃w˜îZŒ[މLÐmý왑ƒ>–‰ÀÝž= zº£h< b0Þ@´C´€x :.èPO´ ‰Þ{ßÓxLÐáÎ͆3Gþ4ÖG~ôg¿œ»Þ·©zQ–ÿmŒ´îð†+‡žìÞ-€ ÅÍÃ;™ˆÓg úœ‚›åX]¢–cC|³Ðƒ?Ñâ ½Ù}Dšº‹[šÍñ=¢÷^´€¢o|ï”`Ò`O´€ð ¶ê- ªã†df5¢ä`°U„hå=\'Ù0«é¢õùëé…ØÌw¿I¹BœÆ ÈÃYh{ÃbE_'Ãå·{o¸QK9¼Ø*S±FD È@·Š- ‰dCŠÝ³ÑR*;ØÊ]¬F´€LŠï$L_¬F´€dÊv«B±Ñò)Ø­"ÅjD H©T·Ò?À!Ñr*Ò­Ñ+÷0«- ±Q·ò¥«Î^Ážh™6åiº5jpîb OûÍßeîÇ ”•¯[£‡Pjëm¤ä7ú\º[•‹Õ8Ë;PGÛ¶ý¿ûX[üâ¹êi…Lw†uM—³f±#- šns?lÀ›G]³M}ç¢ÞC´€ŠB¤kZ¬W-Þ#D ¨kx”«ó’tÉÕ7¢”6r5Ï¥ËÎÀŸD `)]Ã\äÛd¹š-€ÿ̦«Óÿð¬,ÏZ”«oD àË_CÞ=õ|ÍÜz­úI´ ƒ_6Ѝ¯È·5||Í Õ&𠆽Éü¬×î;d#-€ ¾Åf!fútÐpŠd`³ø8OÁ=œ{€0D €0D €0D €0D €0D €0D €0D €0D €0D à‡Ïçsâ)‰Ýx«Ï_Mw'g؃—ù|>G¶–Ç[åZ‘si|»„ãòU‰oØâŸ2´Z¸“ƒ5¥ÐCŠnßWž”}aKxbÞvßÕô¿µ9¥áÃ7Ò* ¿+Ç [ÈÑb|V¦g"P×°oÀš ¾yùO$Z@i·û¡‰Àÿ¼­[?'Y<¾÷òf¢T÷æíþ›—í&büðsÖß‘oPùöÕ&¢ð~ÜÊ]…³³ûÖïfý­Ý­*9»æ·ømÛþ,Ál±v/ÃŽûyÛA¸«‰À’}AÚtš¨ã§´(2Ìjºh ÏEÀV»·Ÿj·ÛŽiœ`:Zºm×búaÖðÚ=pŽMãžãÅ:ñpZ ¢°ßtÒàšt Ïyxâ_¯@´Vþ›éí¦ëø¹£J]ŽdH´Žš­¾¾[[•-V#ZCGb0M×Ênm=V¶Xh9°tÖÅן}£r±ÑŠ;r4ë›õ÷³éàÖšb¥ÿæ–hu]Q¬­÷¶²[+‹•~æËÅ@E£<œ>-bÓˆ§mÛåÛwÿš~µ†h©Œ¶ìâÌnô/Ýá¶û¸®§üÍgXøôãJ ±­ƒ›#w¸fâßúÛ,\RëôhðjÃHýi´ € Ì Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Ñ Œ?Í¿§uzta`‰K“ðjÕ݃„!Z„!Z„!Z„ñÏDŒÑu^Žzäç½½ó®ÖßÛ;ïjͽ½ó®ÖßÛ;ïjͽ½ó®ÖßÛ;ïjͽ½ó®ÖßÛ;ïjͽ¿+#-Â-ÂøøB1Qi†h†h†h†h†h†h†h†h†h±Öú3]\äÏï›Ârrú³y}>ÿœÙ+Y¨¾='3ƒ(D+¿å+Îtÿ:»5ï–¦[ d”jർW3[´á-§7ëÿ5î«eú¦ ‹ûè #­´–;4’iD5Õ=´ÑJèþ7ñ£†”LÄà?¹Çß]âx’hå´i˜µã–­„ö+«Ÿ“,¬"D´HN“ 1øÇ¾MüìÑ •“þŠ/W=ÑÊææÙ³³áûï~-Dhöëbo| ÂûÙ=È~ß¾¿µð]¨Ù-ßÿÕ-1i­Ì 6-ê+к‚ÊD‹lÜ\:2Ì‚XD‹ýÚ¿vü(]}Ê%Ã,ˆB´2{j±òï>>Þºç˜p"Ñâ4Ÿ¿20¸P£M7ÞG± ÑÊæ‘­pߪ5{ gÏ"¿þËXg¥ËåH "Ñâ>![§ÿ-\åÈWR,J´’»gêݾLk´¼«ð¬¯+Ä%Z ½y‹üø¤AÅ‚ÐD+¿­#’+æþ-»í›ÅkŠå›[ðf¢•Óî=iO DnèÖÊb‡Á›9anZmÛ[õss¼u>ÅðþGw¾ÜÈÙ%Y8aî)³0úsønýEàUD+³i·š/“ÈûÛOïdÇÞÂQÏî|ºÀkþÖÖk¤agH ?·Ú[sõí<î[¾¼ ›nüͦby;ÀˉVEN_%Z„aö aü?LbfhÆêIEND®B`‚queueing/doc/qn_web_model.png0000664000175000017500000002623013356152303016174 0ustar morenomoreno‰PNG  IHDR¶åN÷¿ 7iCCPdefault_rgb.iccxœ•‘gP”‡†Ï÷}Û ì²tXz“*eé½I¯¢Kï,K±!b"Šˆ4E €£R$VD±° Y$(×`QA¹?rgâÜ;þ¸Ï¯gÞyçœ3s(¢¨(@Jª€ïçbÏ ãÀ7Dò2Óí||<á»|àî÷;ß…“É€Èç¥óH.hæÒÈq`E%¥ óÀ⇄† ·€÷·O+êo_?ÀÏÅhqßxÔ7þŸ½Êv|ABlL.Ç?-VÉádú¹ØsÜ8>ü´Ø„ä˜oþ¿ÊßA“+pHKßÂOˆ‹pþg¨‘¡!üó‹w¾€ÂüïÿÀ7½´Fî"vàŸ,ª {€Ô“2ÕãŒB€®{¼,~öß` ¤AT@tÁÌÀlÁ ÜÁ 6â!øù° Š Àa¨zh‚h‡³Ð áÜ„»pFá)a^Ã|€eAˆa"Òˆ"¢†è F±FœOÄ E"8$ÉBò‘ÝH RŽÔ H ò r¹†ÜF†‘ÇÈ$2‡ü…|F1”†²PyTÕG¹¨ê Ñ84ÍC ÑýhÚˆžF»Ðkè]t¢¯ÑE 0*ÆÆ”0]Œ‹9`ÞX‹ñ±íX1V‰5bíX/6€=À„Ø<ö GÀ1qœ.ÎçŠ Äñp¸í¸R\ î® ×{€›Ä-à¾âéx9¼Þï†ÁÇásðEøJ|3¾?ŠŸÆ l‚ÁŒàJ%$¶J G „«„aÂa‘H$JuˆVDob$Q@,"VO¯GˆÓÄ$*I‘dDr&…‘RI¤JR+é2i„4CZ&‹’ÕÈdor4y ¹ŒÜDî%ß#O“—)b Š%€’HÙE©¢´SnP&(ï¨Tª2ÕœêKM î¤VQÏPoQ'©Ÿhâ4mš-œ–EÛO;I»J{L{G§ÓÕé¶ô0º€¾ŸÞB¿NNÿ(ÂÑq‰Ù!R+Ò%2"ò†Af¨1ì›yŒJÆ9Æ=Ƽ(YT]ÔA4Rt»h­èÑqÑE1¦˜¡˜·XŠX©X«Øm±Yq¢¸º¸“x´x¡ø ñëâSLŒ©Ât`ò˜»™MÌÌi¥Árc%²JX?³†X âÆA¹µ—$„lŒ­Îvc'³ËØgÙcìÏ’ò’v’1’û$Û%G$—¤d¥l¥b¤Š¥:¤F¥>Ks¤¤“¤JwK?“ÁÉhËøÊäÈ“¹!3/Ë’µ”åÉËž•}"‡ÊiËùÉm•;!7(·(¯ ï"Ÿ._-]~^­`«¨P¡pYaN‘©h­˜ X¡xEñG‚cÇIæTqú9 JrJ®JYJ JCJËÊÊÊÊÊÏT(*\•X• •>•UEU/Õ|Õ6Õ'jd5®Z¼Úµµ%u õ`õ½êÝê³RnymštMÍ ÍF͇Z-®V’ÖQ­ûÚ¨¶‰v¼v­ö=TÇT'Aç¨Îðüó5©k׌ëÒtít³uÛt'õØzžzzÝzoôUõÃôêè501H6h2xj(nènX`Økø—‘¶ϨÖèáZúZçµ;Öö¬}k¬cc|Ìø‘ ÓÄËd¯IŸÉS3S¾i»éœ™ªY„YÙ8—Åõá–ro™ãÍíÍw˜_4ÿdaj!°8kñ§¥®e’e«åì:u1ëšÖMY)[EZ5X ­9ÖÖÇ­…6J6‘66/lUl£m›mgì´ìíNÛ½±7°çÛwÚ/9X8ls¸êˆ9º8;9‰;:Õ8=wVvŽsns^p1qÙêrÕïêázÐuÜMÞçÖâ¶ànæ¾Í½ßƒæáïQãñÂSÛ“ïÙë…z¹{òšX¯¶>u}·7x»yò~æ£á“áó«/Á×Ç·Ö÷¥Ÿ¡_¾ß€?Ó³«ÿ‡û€²€§šY}AŒ ð – ¥`Çàò`aˆ~ȶ»¡2¡ ¡=aİ °æ°Å No˜7 / Û¨±1wãíM2›’7]ÚÌØ¹ù\>"8¢5b%Ò;²1r1Ê-ª.jçÀ;Â{m]=cS3k[;gw(n.Þ&¾2~>Á!¡&ám¢kb}âR’wÒɤÕäàäŽRJDÊ…TñÔ¤Ôþ4…´Ü´átô¢ta†EÆáŒ¾¿9ÉܘÙ#` ÒƒYšY{²&³­³k³?æåœËËMÍÜ¢½eß–™<缟¶â¶ò¶öå+åïÊŸÜf·­a;²=j{ß•…;¦wºì<µ‹²+i×oåïwïî-”/ÜY8µÇeO[‘H¿h|¯åÞúp?$ü0´oí¾ê}_‹£‹ï””T–¬”òJïühøcÕ«ûc÷•™–;@8z`ì ÍÁSåbåyåS‡¼uUp*Š+ÞÞ|øv¥qeýÊ‘¬#Â*ϪžjÕêÕ+5ñ5£µöµuruûê–ŽF9f{¬½^¾¾¤þóñ„ã\ºÕ+ONdŸxÙÔ4ð÷§–f™æ’æ/'SO Oùêo1kii•k-kCÛ²ÚæN‡Ÿ¾ÿ³ãÏ=íºí 쎒3p&ëÌ«_"~;ëq¶ï÷\ûyµóuÌÎâ.¤kK×Bw|·°'´gø‚û…¾^ËÞÎ_õ~=yQébí%‰Ke—)— /¯^É»²x5ýêüµ¸kS}›ûž^¹þ°ß·è†Ç[7o^°¸rËêÖÅÛ·/ÜáÞé¾kz·kÐd°ó7“ß:‡L‡ºî™Ýë¹o~¿wxÝð囑kÜ|èöðîèúÑá±À±GãáãÂGÑf'?~û$ûÉòÓø‰âg¢Ï*ŸË=oü]ë÷¡©ðÒ¤ãäà ÿO§xS¯ÿÈüceºð%ýeåŒâLˬÑìÅ9ç¹û¯6¼š~þzy¾è_bÿª{£ùæüŸ¶.„,L¿å¿]ý«ôô»“ïß÷-ú,>ÿòay©ø£ôÇSŸ¸Ÿ>žYÎY!®T}ÑúÒûÕãëÄjÊêê¿B,¾½‹ Þ pHYs N NwŒ#tEXtSoftwareGPL Ghostscript 9.25Á™? IDATxœíÝÙ–›º@û®üÿ/û>8á0Y«ž’n0Ö°‘eñþ|>/àŸÿ•>¨‹ˆ "2,ˆÈ° "À‚ˆ JŸP»÷ûÝôêï÷{õ“ïËiýu1šmIÞ éû{8¤ºÑ Eùvxí6ÛóŸwáí¾.†µ[€Óø=~~öÜT7ú "!S×b[È÷­G†uX%SixƒË¡Vu£3æ"?Å|,[­ðÉë­éÕ¯AÜÝ ÎþöÕþˆÈ@”¦ãò/]¾(8LÉEÔs&CDöuÿÙhÇ/ ’ï„¡Vu£9"2ðS½Z ›ïãBØå¤{¡‚¨ntâoÀÏçóíöÂË6­¾E´ê)ß ŠÜþòi¿N.8³8À¯“y-¿¾nuÿ¸¿ö³»+º7¯9uv}·›%ÿZu»Ü¯†~ˆÈÀŽS=ëjãÝÞkÞkžÝ>‰Èy#Ûã¾ßïÀÉïþdþB¶GÜ .IŽûÚ{™&€rJ’?Më~É¿PÝ’—î™hì›÷nãûÛUg3ýdþ«y7vjû$/aÚg`·1¿Zü·OÝ}Eá}F¦Ø³Ç ~yÿóýï…bs¶º½Ò•üSÕ-áq雈 ¬Ý̦g»G»œÝ.-rü5rÿ»ÿØDÏp\Fö«R¯’ñMñÕí•«äÿ Vã8d¢°#Ð\˜ñ‰›Í|yû˜¾–å¯=‡‡—N̯Ox_?ÆÛRwû'zt~•_EñZŽœï3¦º½Ò•üSÕ-áq阈 D ô@­X½„ÝŽð‰®1¦ÇM~Ü;‡‘}}% ¦º½ž)ù‘÷áiKL´¦1¤­Õ6-ŠŸ’øÄá^ÏPe~t)Uí¾ºÑ7£ÈÀZx–EÎ3yB‘áðœ]õvôîeÌŒ«nÝî«3Š ü§ƒü~!Þ¤=®ïÝóʸˆïåêvø·Ï馭ã9"2°pmY†´;¿¼ýü“w÷_òµÁ­Ë/d”žóÐPñ…}Þ¯n׎K—Dd௘Ža„±É‡:ÈÃÝ&9îv'#¼el¥BÎP~JÅkQ˜0¸(¾ƒ9;ö×ögp=µñjüi{Ü;CÚÛCd8.cšW“œÃ¨gÿê¡’®nÏ—þøºðz%PYõ1‡ù8rûk Qín V$[¯™ü¸¾®×«mÙžžkîo¿ËÕíþ¡/+u\êçn F·Û_žZlõ¤€íÄÄðÞ.l¿{Ûí·08<Êîöa§ÈSŠÉ©IŽ{íôhBä}l’o£^Çg«ÛîŸÜ¬q‘·…OÔtz""i\ˆ°§¶€lÌE€DdX‘`AD€+ZwÝ_U-¼=d&"À‚‰° "À‚ˆ "2,ˆÈ° "À‚ˆ "2,ˆÈ° "ÀŸÒ'´çý~—>Rú|>¥Oah*TgT¨>¼½‘@ ½øô9©S#P§Ú%"tä£Ñ/Ÿv|L«÷Ý×Ë.“yiKÛdøÏ¼;×8ðR$îqõXQ$bøKÛÍ–’„ËÈ×¼$øp¦r"2°¦;g—ý—‹]ØVˆÈÀë5ëÎ5߬÷ºÀg2LEB…ª™ˆ h¦9 ä]æÒ¦ù­–ˆ £3ÜÅ)zôC.‡4¶õ‘¿4Ù(¸h˜nQ9€(zô¦õCDdàõÒd§á­™ˆ C3Pœ¦¸B"2± z…™eÝøSúhÏûý–Ódñ¡bsêê)ºÄ‘a\F¼€v]¾©¨j¥ËÏçó=·µ‘€f¤n7RÀ/"2”×wDK’kíäÂ¥Ûîêû“¾ßN‘€ªí†ã;qö×"ß‚2¨Ô6§Í¯»YYPæ%"z:ïî\Pfb]d .™óqà(ƒ,ÆÇ–ˆ Td•J?ŸOΡÜíá¤ä1‰È@-V‹—šç°:´”< (ïý~WõPÕ9¬Nî‰È@aÛÉ¥ÎdŤ‹a‰È@EêÉÇ_µyˆÈ@IµÍ¯Ø2/y@"2PLýùøKJˆ ”ÑJ>þ’’‡""´•¿¤äqˆÈ@I­ä㯶ΖËDd ·i¶ÅÄ9³äŽ‰È° "Y5=„üe ¹{"2O™²¿WÄKDŠhwù«õó'LD2)2àú~¿Ÿ>®äþˆÈ@nÙ†` ¯’;&"}2¸Ëe"2UOƒ¯–¶è•ˆ tèý~÷”ÅÉLDzcL—›Dd Ÿ #»ß|œmÙXu—Dd 7Eb«¡ëžˆÈ@?LA& è„q\R‘€~B& ÈäÑüZpŠ…\Þhž)¤%"m˼ÊÛá™Ðh^ ù˜žˆÈ@à Üò„?¥Oà¢)åù†œ9dDdX0ÑhÕᔉi~EžÉ¦ptÃ(2,ˆÈ@&½®>Ñë뙈 "2,ˆÈ°`E Ÿ÷ûsÙ‡ ÇʼhyE€Dd «.—H3Ë¢3"2ÀE]Æ}^"2¬ˆÈ@&Ól„>_­eÑ1¬‹ \ÑÇPŒ<ƒC«ëiDŠŽ}>Ÿoϼ@rr†û&"dsw±ÝF “ˆ ÃÍqwãUô¤ƒdU²{"2pE÷½Bª™$áý„/ãîßê˜éL‹)yœ™f#‘ñ«Oó-·{ûþ¤¹l_Ó@rÓTÀŽ‰È‰ívü7»Ò_Ke Êt ­ä’=1Dd€d2|Ín7+ Ê´h>ÜJJž×»&N˜Ë¬‹ ÀûýÞ.ÜöhºÝÿö ráÙDµ‘‡""Ü•9‡U΀¹VR²|<à–žú!%Ó´úS²|< àºUÇY°ï\½Îœ¿Ô\zåã1‰ÈUØqÖœ3 ¬ÎÒ[a5'àŠj;Î:sÄX•Þ²xuUUs2‘N«¼ã”’iW%ëkøŽe‰ÈçTž¿¤dÚUv5ÃݳzˆÈ'4‘¿¤dÚUdÙïü«›S3 VCùøKJ¦iÙ‚òîn›¨ã<ǨNk¨ïlñ¿07/Ã_Óo–ç_i[5á%"D2 ¥|3ë¶^Ëʺ,3("‡o#o%“|“êöw»ÃÉô¢ÔvH¢¹)s’›àìÐTtYùæža2PDÞFáy•ÿvw³k5*y#¸=™âkIBÇíJ·UC»YùÚ~`k ˆüU¼ŸH{»a=<.œÕYm2L7Î.¢¬äo¸ˆŸ_k¨fáS-~3ý©¡â_¦M¨\Ó¥«®! ½è[¸·è£/éãU@A]V¢._@B#Ž"‡‡RZêZ AB På\vJ›ièQäËjû(Çú5Ш@å}(˦úž@ßFEž må—Zή wg¹Ë 9Åtµ2Ýü¿á‡×–´»yܯrx¢n‹÷öùJ>@ƒFäÀ§wfYlû³ïúk¿:¹Ý½]î#—¢;<ÉÃõ&çWo{¸_×öþq¡'–£¨™‰C›ñ£¼>0ý,Åìêðd‹"Çüj{2Û3<ü¬6~!žSÇ…žü*Û×ZƒûÇ`2nDÞí$.¬ça"áSŠù«˜) ¯«'¹›Œ~ ?}\xN¯%Ðp5À/ƒN´¸æ°; •žêeÏn¿ý|ö×Rd`²Ê£Ç…–yKO”%"¿^ËîjwD6ðÛ¹û9ïf¿¸úóÝn8y ¸B0LT€Ê;Ñâu4_6~6mUržvøvúÐe‘îòE$4tDÞºðU¼ åïüÚº>Ч«³Ê °KDþk·ŸØ]éìN®¹y¬ðbÏÏé=1ÄS_Ê="gpMÞá=ñmž ;Ü.Ó–ç¸0Ó!J="Ï%éšH{OœdÌ>›¸8PœšPœˆ|àÂZÛGÈÆ¯ž]BøTWšê$íöÂsîú¦^dÑ·3ÊÇÓ_?)¹Ôœ9æ’<‡€›Dä¿’,iüŠ{`õÊãŸn}ö Cw;Ð{áÄ*9.´H±(ND~½’>$rã$]`ä$³G¿pnI^µXæTÂ\d€*ÈÇõ‘Ê“ª""&ÔFD()&[) 3 ˜È|lŒ 3+Z”ñkñGŠ3Š òP„-›Œcž.02 ·ËŽ -r“z*gà€é£‘Æb"2À!DdX‘Žu3Ù, €"2@”nR2‡Dd€žF[ !D².ò±A†Žžî2—QoM+Þïw»Åu¦¬]ƒ¼AúZ!"óˆSmýjc­µù|>=ÅUŒžÄ×M} §ˆÈ¤”$FÌw¢ £6$÷ñA_C"ò±¾kNò†f+òîîÄÔI*ÑÍ@²ªT­¾ß} Í‘¹k·¹¹ÐÊÌÿd»ÏF‡îèRs¥±pÏàô5d&"sݶqIÕ²Lû™âûo¥Ì’êG}šLëô5!"sÅs Öîn5^T¢¹”,Ó4} Y™Ó¶_ ~ºÙÂÇ”þ”¶*ò1MÓ×P–QdN(»bÎê.ß->¥41–,Ó.} 50ŠL¬JV”t‹O *K®ð” ’¾†JˆÈD©¤ÍÚ=º–‹âª*„UÕV8¥ªÒ«¯œˆÌ±Õ'¶5ô¸«ÓÐr‘_…°ÂÚ ‘*,½uVsò‘9PóŒF-Å­ aÙrXsm…°šK¯¾fL]Eä÷LéséDÍmÖ×P-—â]§>]Œ:kkmtõ¨¿ôÕ×ðÕíŠõ×·úµr ›X^à¾í‚_½¾Þ¶¬Oó+ðÙŽí›:UP+¾†I·y®•êW•¶.Ú-×*„MÚz§:–ÿÑÂñCÔ©œÚºÚ#ô5LºŠÈ1Ÿƒ´UkÐÊUú• {rXÂïâòeá8 ]FUZ¹¼#ô5|u‘ç´}w´^ÿG¸¹—k¶íD§ÿÞy/~ULïï}ºŒ"ô5Ô¬Ûˆ<§í;¥ÝK1ìG`âr…¶ÃÉ_gß‹p†ðn>A—‘G»×pؾf4^í߯%×n½M«Å×3awp©.…KcªDi‹e%uSørnª¤<ŸòÐt e©ŸÏgˆQä;F»Aì©~ŽöÞQ³$+F)ÏtC_CýDä‘ }»¯Ýw)"¹P¥D®£Ün–:uA»åÜÛݽEDn·¤FŠ)ÍÝ_„€$ß(ªÁÔrM7÷­¿¢H‡%<áuä’fÐî•l÷Ì#é2Òq_s‡÷wÂóZßÿ(²6޾åŒÅÐ=]F÷Ì‹ RŸYwAÎÛú ÏK~s_±Òe䔡¯É¹Lß}ÍຊÈrCýÌܺLñ†´Ô)  «ˆ¼KW áø Š7¤¥NµÎRâ¤ÒgDV.{îÒ…ˆ}èˆ=}þ5½œ^ TEÊïékžó=í¬¯aÒUDV4é› ©P½òÎ’ÄÿJŸ@fô‘ˆÌú»óÎ?»€°§ûšü ¾¾¦K]M´Æ4§Ý<„‚Œ"}z¿ßFv¹FDz&(s‰üÕë§QÓr<—aiѯÌ-¿¾¦?F‘€Þ|>Ÿ²¡™Ö‰È@Ÿò§dA¼"2£Ðl ¨×i„Z÷-·»%\ñ† t@@WùµlË´}×ôqsßëõK¸â ñték¨\oyNÛwJ`@¥i¿­â2$¤ËÈC_C+zŽÈsÚ¾SZ¿¹ï²ý —!!]FújVQDŽ/j‡5ê~©³íëïæ~µRfüöE jÚ2Ÿä]<Ô$|÷K‰y 9kAüÞÒÖô³Óq_sÓáe©¶d®éyT‘‹è¯¢¦Òîͽ/S­k­Í˜wì ¢ƒ¾†^‘E¼ÑJ{“{†qx¯³IxÝV+°æ [=µ?*c¯ÞóbÚ÷Ûœä3Áþì¾ûí‰vÏü¾ %|äËuèþÅIx^ÕÍü8ÅæÂ§Þã\œ³ô5ÙöÆó÷¢óQd±ø¦¶>ëfL"ž^­Ý·æò{˜UßV%­_’É œÕV1°¯S‡Yh¸oþÙB+-×8ó5•ðÊmß „oÇnVþþÛ›~™X\о†šu‘ÃÍœ¢|J[-×m–^¼~†ãÝ= Êwè2j ¯¡Ze"r¶i7Jð­|bä6k´×[³UeÉóÖìe¥â2—®ˆVúš9E%²³´»EþRpŸPm¿Û\ÃzÙÔ‹ÔùF ®ì}Ú*(+'§¸PU©¶ôŽÓ×0ù_éHéóùTX¯š¶úêqmmD‘q»‚”ð ­êEÁ7è×r%ü¢BÕ£òÒ;Z_ÃWW™'TÛri³(®¶BXmm…CÕ–ÞÚª9وȫ°åZÛi³È¯ÎŽsUj¨­©ò¾æUM5'™(Uõ»•|®ÍÈ*¿I«§¶Â)5÷5µUsž&"sBñ©ÉõÌûddMÂzrœ¥¯¡"2çl?ËÓxm¤Í¢¸Ê ¡”L»ô5×á¢o<-ó3 r>޵•5[\q¾ô5”%"sѯÆë•¨YÙí×5X”Õôg¯Õ®núJ‘¹ewŒêNûõkÄKƒEqæã¶ð »²õ5×öF—DdîšZ“@ûµÚ2°M`ÿP‰æÊ¤ét@_Cf"ò1]K¤@ûþyxoPƒ´Ÿíæ7¥dÉÕÒ×DÒׇˆLz‡íWÌß@€¾†G•‰ÈŠæ ¶o´ÅthQëCÈ_’镾¦Weß8£ÈÇT­„\LšÓåÇßRr…¼# ¹˜Ü'"Dɶës‡ó½=€Hž®PL °Ê²‰ÈÇžÓ6·Ý ­;ßp‡ˆ PÌ6y›C P €Àæ¤d€âDd€}s.ù>ÏÚ\ €_DdX‘*eÆ@)"2@Hþœ:­tñÜ!„o€°2éãi®ÉÖ6zÌP­²qÑ(2@-Þï÷·KðE:€²Dd€ò¦p<ÿI©“@D(ìW–’J)3€Ià¹Óæ a .21@q"2@u¤d€²DdX‘jd   DdX‘jdQd€‚Dd€z™‘ P„G‡0 ï†àïoåc€RÊDdí>À×öùy9ó±Ö¨VÙÊ(2@H†G@¯¦gèLt‘ ˜r°9‘JŽ*dE €MKS€—ˆ +"2,ˆÈǺ™ka–@ Dd€ÕêlMëà%äaÑ7€á˜eQ¡An`ò”½üã¡?e"²Ép@C>ŸÏ·ÕÊð¤½çhxéÕáÝÅvµ  e[-£È@{»cäˆ p¬õd ~}¿5©¦‘Äìg÷JþúÃùÏû~ 8KD8§¹”<È$Wú(Æ1õqµÍîÞ¾?l«vó Ê4üj*%$£u»qöfažÿùjÿ‚2_}ˆèVë$ÓºÝoÚ¥-Ì»;l¢‚ó(£È'ÌÇ’"ÓœÌËP|w>?¨áäÁE¸¨ò¬\ùéAÀvaã´U’} =g‰ÈÀzˆ»Ay÷'×ö íJøéJ~SJ6Ü1àYS*ÃWO÷ØRr¯Dd€L®=ƒ@ïKÇÚ-Þ¦[tOD®h·c«‡kȘúK–’»dÑ7 €Ì±òýOªŠÅ}3Š d’9Ï÷ $÷GDrË(3„c3’;&"]iñ¡$Ô¦LDnz5DàŽ§çNøMê!"ÍOIKDÚfŠÉYô èÍvPYtæ£È@&yž²;éâÑ™òwŒ"ýئÕ)[º˜xF‘€†NDžÿзúˆ$"Ë6x,‚wCD"ÅCD€…2_×3Y€€²qÑ(2Ð0ãn’€ae›‘Hóœ²×Ö(2,ˆÈ° "™„ðѳ,:&"ô‘’镈 äÓÍ€«!侉È@í$·{æD‘€¬zvíéµ0'"Å´8Ûâ9s–ˆ ä6|m+qÎÏÖrÇDd €vSò—|Ü7 J‹QžkDd Œ¶’M±ÊŸ"GU°€×ëõù|¦èù~¿«Mòq~e¯³Qd ¤úÇ’åã‰È@a5§dùxL"2PÞ*%×”W§!EDª°Ê eSòêèòñhDd Û”œ?(o*HD*òù| 'oñ|<&¨NþádƒÇÌ•Y ì›Pç±õûïäÉu¾…cDd ^¿‚òü·ü“Žù‘€Úmƒò×ô“Èh˜­!3'"@y5,\¿)Ųòå}Â\™ˆ|öžxÂçóÑ+- då³{(K" ({qŒ"¯÷û­uZ¿<œVŽSDdbñ »óÉŒKš„ËH*ÖE®šÁZ¤õ†ÖE~P¸‰œÏ£šßõvÖ°ZU§rÓ —¹™ùX¦f"ò#Âç™Éîöô ªÀ È 9Ý4M‡L´HlõøÊÝg»øþýyÙq~s¼û’u·µñŽ©6ê!÷WZ`JHåDä”Ãñ\ß}ÌôŒÐùË<¼&áM!†îüá:‰È%õ]+Â#å_úÚxGØ•äy¿ãp‰8drýDäd®u!ê5pßB$MV$Ó-P*š "§aˆeîð«x.Q…¼)ü¢;¿Éä oÍDdÒSç[§Ggâþÿ2ΰË‹VXô­¼k•d·Á ìêÔúÄ3Ó|ÁA«òñ’oS§Xq³Ô9Ì%~÷4üô‡i}‰ÝýÜÙø&FmV=úË{40}yrRòÈÂL Be&ZüZ(—C¿>  |5äTÐÉ“Št½5ËswDÍV뻿tç7l+”:5 êš²qÑ\äÄ*÷§Nõ‰×ÕеN}dÛ¾\U½i{ U¨q¸ál—ˆ<ŠS-ò£Í·¾¡ :õéËåÎs@n8›f.rcîÔ®í4¸ð×ûâ7¾@3Ñ„ùÔä—/oõÈwssú^UuªoêT7DäÄJ}#r4âÔé=ñZ|¬9ÛNýËXÇÔÐG­î<'êT¯T¨F‰Èm›{/p纴<:~ãk4-ò¨°¨›Ù¨P#P¡Z'"'ˆ§Ï9^·gøóSŸbÁ£xBgTɲT¨Î¨P=‘ÛsíÁ<»—ÿʬ§6Ž$÷Ç ©PP+Z¤—g9ˆké©e ®i  ‘Ó¨9ÿmsí©çT›_ŒFD~ÄÙÑÖøõ(.ÎŽlÏ ‰ÉÇfàU)‘ßÿ9úC.ÏI(5Èš!%GæccÌÀJÙ¸èëz)mWL ‡¿³+EÌ÷¿Úy¸ížÉ¯?9µqø ×þ ,9±Èu…Ãߺ»0ïb•ž;ßžp̱În,í‘Ó ?btµÙJàfßí·‹ÞsàoOmù翘eÔFD~ÊnB=ŒƒwÆ}ÏþüþÆî 9© }€DdX‘`AD€j_ô-ò!1KªåßUÌÞêÜUüÞêÜUÌÞêÜUüÞºßUÌÞêÜUüÞêÜUÌÞêÜUüÞêÜUÌÞêÜUüÞêÜUÌÞêÜUüÞêÜUäÞJ1Š eF‘k¾i`pïÏç3‡K®Œi‰M´€DdX‘`AD€DdX‘`ADlßáˆÒIDAT€DdX‘`AD€DdX‘`AD€DdX‘`AD€DdX‘`AD€DdX‘`AD€DdX‘`AD€þÌÿó~¿KTÂ(2,ˆÈ°ðþ|>¥Ï*bDdX‘`AD€DdX‘`AD€D䪽ßïÒ§0œ?¥O gá€;=úûý^<¼ãXü}ižyTND~Ä*æ®Bá÷·»Qø—ûKÉý½" c"rbáp<ÿánjüþª§”ÜÍ Æ!"§4ƒ‡Ó zÊÁóù$eÏ ’¯ë•dV.@…DädN !_Ø€ó4ùké‰ð·î.Ì»˜÷ÔWúò%—5ˆ$¬<å0æž ÇÓö«mÎþ<|§6>tí"”%"gra%cŠ‘`Á×õ`áÿ¨ñt1åá,IEND®B`‚queueing/doc/markovchains.texi0000664000175000017500000012523213356152302016414 0ustar morenomoreno@c This file has been automatically generated from markovchains.txi @c by proc.m. Do not edit this file, all changes will be lost @c -*- texinfo -*- @c Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2018 Moreno Marzolla @c @c This file is part of the queueing package. @c @c The queueing package is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public License @c as published by the Free Software Foundation; either version 3 of @c the License, or (at your option) any later version. @c @c The queueing package is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied warranty @c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with the queueing package; see the file COPYING. If not, see @c . @node Markov Chains @chapter Markov Chains @menu * Discrete-Time Markov Chains:: * Continuous-Time Markov Chains:: @end menu @node Discrete-Time Markov Chains @section Discrete-Time Markov Chains Let @math{X_0, X_1, @dots{}, X_n, @dots{} } be a sequence of random variables defined over the discrete state space @math{1, 2, @dots{}}. The sequence @math{X_0, X_1, @dots{}, X_n, @dots{}} is a @emph{stochastic process} with discrete time @math{0, 1, 2, @dots{}}. A @emph{Markov chain} is a stochastic process @math{@{X_n, n=0, 1, 2, @dots{}@}} which satisfies the following Markov property: @iftex @tex $$\eqalign{P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0 \right) \cr & = P\left(X_{n+1} = x_{n+1}\ |\ X_n = x_n\right)}$$ @end tex @end iftex @ifnottex @math{P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, @dots{}, X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)} @end ifnottex @noindent which basically means that the probability that the system is in a particular state at time @math{n+1} only depends on the state the system was at time @math{n}. The evolution of a Markov chain with finite state space @math{@{1, 2, @dots{}, N@}} can be fully described by a stochastic matrix @math{{\bf P}(n) = [ P_{i,j}(n) ]} where @math{P_{i, j}(n) = P( X_{n+1} = j\ |\ X_n = i )}. If the Markov chain is homogeneous (that is, the transition probability matrix @math{{\bf P}(n)} is time-independent), we can write @math{{\bf P} = [P_{i, j}]}, where @math{P_{i, j} = P( X_{n+1} = j\ |\ X_n = i )} for all @math{n=0, 1, @dots{}}. The transition probability matrix @math{\bf P} must satisfy the following two properties: @enumerate @item @math{P_{i, j} @geq{} 0} for all @math{1 @leq{} i, j @leq{} N}; @item @math{\sum_{j=1}^N P_{i,j} = 1} for all @math{i} @end enumerate @c @anchor{doc-dtmcchkP} @deftypefn {Function File} {[@var{r} @var{err}] =} dtmcchkP (@var{P}) @cindex Markov chain, discrete time @cindex DTMC @cindex discrete time Markov chain Check whether @var{P} is a valid transition probability matrix. If @var{P} is valid, @var{r} is the size (number of rows or columns) of @var{P}. If @var{P} is not a transition probability matrix, @var{r} is set to zero, and @var{err} to an appropriate error string. @end deftypefn A DTMC is @emph{irreducible} if every state can be reached with non-zero probability from every other state. @anchor{doc-dtmcisir} @deftypefn {Function File} {[@var{r} @var{s}] =} dtmcisir (@var{P}) @cindex Markov chain, discrete time @cindex discrete time Markov chain @cindex DTMC @cindex irreducible Markov chain Check if @var{P} is irreducible, and identify Strongly Connected Components (SCC) in the transition graph of the DTMC with transition matrix @var{P}. @strong{INPUTS} @table @code @item @var{P}(i,j) transition probability from state @math{i} to state @math{j}. @var{P} must be an @math{N \times N} stochastic matrix. @end table @strong{OUTPUTS} @table @code @item @var{r} 1 if @var{P} is irreducible, 0 otherwise. @item @var{s}(i) strongly connected component (SCC) that state @math{i} belongs to. SCCs are numbered @math{1, 2, @dots{}}. If the graph is strongly connected, then there is a single SCC and the predicate @code{all(s == 1)} evaluates to true. @end table @end deftypefn @menu * State occupancy probabilities (DTMC):: * Birth-death process (DTMC):: * Expected number of visits (DTMC):: * Time-averaged expected sojourn times (DTMC):: * Mean time to absorption (DTMC):: * First passage times (DTMC):: @end menu @c @c @c @node State occupancy probabilities (DTMC) @subsection State occupancy probabilities Given a discrete-time Markov chain with state space @math{@{1, 2, @dots{}, N@}}, we denote with @math{{\bf \pi}(n) = \left[\pi_1(n), @dots{} \pi_N(n) \right]} the @emph{state occupancy probability vector} at step @math{n}, @math{n = 0, 1, @dots{}}. @math{\pi_i(n)} is the probability that the system is in state @math{i} after @math{n} transitions. Given the transition probability matrix @math{\bf P} and the initial state occupancy probability vector @math{{\bf \pi}(0) = \left[\pi_1(0), @dots{}, \pi_N(0)\right]}, @math{{\bf \pi}(n)} can be computed as: @iftex @tex $${\bf \pi}(n) = {\bf \pi}(0) {\bf P}^n$$ @end tex @end iftex @ifnottex @math{\pi(n) = \pi(0) P^n} @end ifnottex Under certain conditions, there exists a @emph{stationary state occupancy probability} @math{{\bf \pi} = \lim_{n \rightarrow +\infty} {\bf \pi}(n)}, which is independent from @math{{\bf \pi}(0)}. The vector @math{\bf \pi} is the solution of the following linear system: @iftex @tex $$ \left\{ \eqalign{ {\bf \pi P} & = {\bf \pi} \cr {\bf \pi 1}^T & = 1 } \right. $$ @end tex @end iftex @ifnottex @example @group / | \pi P = \pi | \pi 1^T = 1 \ @end group @end example @end ifnottex @noindent where @math{\bf 1} is the row vector of ones, and @math{( \cdot )^T} the transpose operator. @c @anchor{doc-dtmc} @deftypefn {Function File} {@var{p} =} dtmc (@var{P}) @deftypefnx {Function File} {@var{p} =} dtmc (@var{P}, @var{n}, @var{p0}) @cindex Markov chain, discrete time @cindex discrete time Markov chain @cindex DTMC @cindex Markov chain, stationary probabilities @cindex Markov chain, transient probabilities Compute stationary or transient state occupancy probabilities for a discrete-time Markov chain. With a single argument, compute the stationary state occupancy probabilities @code{@var{p}(1), @dots{}, @var{p}(N)} for a discrete-time Markov chain with finite state space @math{@{1, @dots{}, N@}} and with @math{N \times N} transition matrix @var{P}. With three arguments, compute the transient state occupancy probabilities @code{@var{p}(1), @dots{}, @var{p}(N)} that the system is in state @math{i} after @var{n} steps, given initial occupancy probabilities @var{p0}(1), @dots{}, @var{p0}(N). @strong{INPUTS} @table @code @item @var{P}(i,j) transition probabilities from state @math{i} to state @math{j}. @var{P} must be an @math{N \times N} irreducible stochastic matrix, meaning that the sum of each row must be 1 (@math{\sum_{j=1}^N P_{i, j} = 1}), and the rank of @var{P} must be @math{N}. @item @var{n} Number of transitions after which state occupancy probabilities are computed (scalar, @math{n @geq{} 0}) @item @var{p0}(i) probability that at step 0 the system is in state @math{i} (vector of length @math{N}). @end table @strong{OUTPUTS} @table @code @item @var{p}(i) If this function is called with a single argument, @code{@var{p}(i)} is the steady-state probability that the system is in state @math{i}. If this function is called with three arguments, @code{@var{p}(i)} is the probability that the system is in state @math{i} after @var{n} transitions, given the probabilities @code{@var{p0}(i)} that the initial state is @math{i}. @end table @seealso{ctmc} @end deftypefn @noindent @strong{EXAMPLE} The following example is from @ref{GrSn97}. Let us consider a maze with nine rooms, as shown in the following figure @example @group +-----+-----+-----+ | | | | | 1 2 3 | | | | | +- -+- -+- -+ | | | | | 4 5 6 | | | | | +- -+- -+- -+ | | | | | 7 8 9 | | | | | +-----+-----+-----+ @end group @end example A mouse is placed in one of the rooms and can wander around. At each step, the mouse moves from the current room to a neighboring one with equal probability. For example, if it is in room 1, it can move to room 2 and 4 with probability @math{1/2}, respectively; if the mouse is in room 8, it can move to either 7, 5 or 9 with probability @math{1/3}. The transition probabilities @math{P_{i, j}} from room @math{i} to room @math{j} can be summarized in the following matrix: @iftex @tex $$ {\bf P} = \pmatrix{ 0 & 1/2 & 0 & 1/2 & 0 & 0 & 0 & 0 & 0 \cr 1/3 & 0 & 1/3 & 0 & 1/3 & 0 & 0 & 0 & 0 \cr 0 & 1/2 & 0 & 0 & 0 & 1/2 & 0 & 0 & 0 \cr 1/3 & 0 & 0 & 0 & 1/3 & 0 & 1/3 & 0 & 0 \cr 0 & 1/4 & 0 & 1/4 & 0 & 1/4 & 0 & 1/4 & 0 \cr 0 & 0 & 1/3 & 0 & 1/3 & 0 & 0 & 0 & 1/3 \cr 0 & 0 & 0 & 1/2 & 0 & 0 & 0 & 1/2 & 0 \cr 0 & 0 & 0 & 0 & 1/3 & 0 & 1/3 & 0 & 1/3 \cr 0 & 0 & 0 & 0 & 0 & 1/2 & 0 & 1/2 & 0 } $$ @end tex @end iftex @ifnottex @example @group / 0 1/2 0 1/2 0 0 0 0 0 \ | 1/3 0 1/3 0 1/3 0 0 0 0 | | 0 1/2 0 0 0 1/2 0 0 0 | | 1/3 0 0 0 1/3 0 1/3 0 0 | P = | 0 1/4 0 1/4 0 1/4 0 1/4 0 | | 0 0 1/3 0 1/3 0 0 0 1/3 | | 0 0 0 1/2 0 0 0 1/2 0 | | 0 0 0 0 1/3 0 1/3 0 1/3 | \ 0 0 0 0 0 1/2 0 1/2 0 / @end group @end example @end ifnottex The stationary state occupancy probabilities can then be computed with the following code: @example @group @verbatim P = zeros(9,9); P(1,[2 4] ) = 1/2; P(2,[1 5 3] ) = 1/3; P(3,[2 6] ) = 1/2; P(4,[1 5 7] ) = 1/3; P(5,[2 4 6 8]) = 1/4; P(6,[3 5 9] ) = 1/3; P(7,[4 8] ) = 1/2; P(8,[7 5 9] ) = 1/3; P(9,[6 8] ) = 1/2; p = dtmc(P); disp(p) @end verbatim @end group @result{} 0.083333 0.125000 0.083333 0.125000 0.166667 0.125000 0.083333 0.125000 0.083333 @end example @c @node Birth-death process (DTMC) @subsection Birth-death process @anchor{doc-dtmcbd} @deftypefn {Function File} {@var{P} =} dtmcbd (@var{b}, @var{d}) @cindex Markov chain, discrete time @cindex DTMC @cindex discrete time Markov chain @cindex birth-death process, DTMC Returns the transition probability matrix @math{P} for a discrete birth-death process over state space @math{1, @dots{}, N}. For each @math{i=1, @dots{}, N-1}, @code{@var{b}(i)} is the transition probability from state @math{i} to state @math{i+1}, and @code{@var{d}(i)} is the transition probability from state @math{i+1} to state @math{i}. Matrix @math{\bf P} is therefore defined as: @tex $$ \pmatrix{ (1-\lambda_1) & \lambda_1 & & & & \cr \mu_1 & (1 - \mu_1 - \lambda_2) & \lambda_2 & & \cr & \mu_2 & (1 - \mu_2 - \lambda_3) & \lambda_3 & & \cr \cr & & \ddots & \ddots & \ddots & & \cr \cr & & & \mu_{N-2} & (1 - \mu_{N-2}-\lambda_{N-1}) & \lambda_{N-1} \cr & & & & \mu_{N-1} & (1-\mu_{N-1}) } $$ @end tex @ifnottex @example @group / \ | 1-b(1) b(1) | | d(1) (1-d(1)-b(2)) b(2) | | d(2) (1-d(2)-b(3)) b(3) | | | | ... ... ... | | | | d(N-2) (1-d(N-2)-b(N-1)) b(N-1) | | d(N-1) 1-d(N-1) | \ / @end group @end example @end ifnottex @noindent where @math{\lambda_i} and @math{\mu_i} are the birth and death probabilities, respectively. @seealso{ctmcbd} @end deftypefn @c @node Expected number of visits (DTMC) @subsection Expected Number of Visits Given a @math{N} state discrete-time Markov chain with transition matrix @math{\bf P} and an integer @math{n @geq{} 0}, we let @math{L_i(n)} be the the expected number of visits to state @math{i} during the first @math{n} transitions. The vector @math{{\bf L}(n) = \left[ L_1(n), @dots{}, L_N(n) \right]} is defined as @iftex @tex $$ {\bf L}(n) = \sum_{i=0}^n {\bf \pi}(i) = \sum_{i=0}^n {\bf \pi}(0) {\bf P}^i $$ @end tex @end iftex @ifnottex @example @group n n ___ ___ \ \ i L(n) = > pi(i) = > pi(0) P /___ /___ i=0 i=0 @end group @end example @end ifnottex @noindent where @math{{\bf \pi}(i) = {\bf \pi}(0){\bf P}^i} is the state occupancy probability after @math{i} transitions, and @math{{\bf \pi}(0) = \left[\pi_1(0), @dots{}, \pi_N(0) \right]} are the initial state occupancy probabilities. If @math{\bf P} is absorbing, i.e., the stochastic process eventually enters a state with no outgoing transitions, then we can compute the expected number of visits until absorption @math{\bf L}. To do so, we first rearrange the states by rewriting @math{\bf P} as @iftex @tex $$ {\bf P} = \pmatrix{ {\bf Q} & {\bf R} \cr {\bf 0} & {\bf I} }$$ @end tex @end iftex @ifnottex @example @group / Q | R \ P = |---+---| \ 0 | I / @end group @end example @end ifnottex @noindent where the first @math{t} states are transient and the last @math{r} states are absorbing (@math{t+r = N}). The matrix @math{{\bf N} = ({\bf I} - {\bf Q})^{-1}} is called the @emph{fundamental matrix}; @math{N_{i,j}} is the expected number of times the process is in the @math{j}-th transient state assuming it started in the @math{i}-th transient state. If we reshape @math{\bf N} to the size of @math{\bf P} (filling missing entries with zeros), we have that, for absorbing chains, @math{{\bf L} = {\bf \pi}(0){\bf N}}. @anchor{doc-dtmcexps} @deftypefn {Function File} {@var{L} =} dtmcexps (@var{P}, @var{n}, @var{p0}) @deftypefnx {Function File} {@var{L} =} dtmcexps (@var{P}, @var{p0}) @cindex expected sojourn times, DTMC @cindex DTMC @cindex discrete time Markov chain @cindex Markov chain, discrete time Compute the expected number of visits to each state during the first @var{n} transitions, or until abrosption. @strong{INPUTS} @table @code @item @var{P}(i,j) @math{N \times N} transition matrix. @code{@var{P}(i,j)} is the transition probability from state @math{i} to state @math{j}. @item @var{n} Number of steps during which the expected number of visits are computed (@math{@var{n} @geq{} 0}). If @code{@var{n}=0}, returns @var{p0}. If @code{@var{n} > 0}, returns the expected number of visits after exactly @var{n} transitions. @item @var{p0}(i) Initial state occupancy probabilities; @code{@var{p0}(i)} is the probability that the system is in state @math{i} at step 0. @end table @strong{OUTPUTS} @table @code @item @var{L}(i) When called with two arguments, @code{@var{L}(i)} is the expected number of visits to state @math{i} before absorption. When called with three arguments, @code{@var{L}(i)} is the expected number of visits to state @math{i} during the first @var{n} transitions. @end table @strong{REFERENCES} @itemize @item Grinstead, Charles M.; Snell, J. Laurie (July 1997). @cite{Introduction to Probability}, Ch. 11: Markov Chains. American Mathematical Society. ISBN 978-0821807491. @end itemize @seealso{ctmcexps} @end deftypefn @c @node Time-averaged expected sojourn times (DTMC) @subsection Time-averaged expected sojourn times @anchor{doc-dtmctaexps} @deftypefn {Function File} {@var{M} =} dtmctaexps (@var{P}, @var{n}, @var{p0}) @deftypefnx {Function File} {@var{M} =} dtmctaexps (@var{P}, @var{p0}) @cindex time-alveraged sojourn time, DTMC @cindex discrete time Markov chain @cindex Markov chain, discrete time @cindex DTMC Compute the @emph{time-averaged sojourn times} @code{@var{M}(i)}, defined as the fraction of time spent in state @math{i} during the first @math{n} transitions (or until absorption), assuming that the state occupancy probabilities at time 0 are @var{p0}. @strong{INPUTS} @table @code @item @var{P}(i,j) @math{N \times N} transition probability matrix. @item @var{} Number of transitions during which the time-averaged expected sojourn times are computed (@math{@var{n} @geq{} 0}). if @math{@var{n} = 0}, returns @var{p0}. @item @var{p0}(i) Initial state occupancy probabilities. @end table @strong{OUTPUTS} @table @code @item @var{M}(i) If this function is called with three arguments, @code{@var{M}(i)} is the expected fraction of steps @math{@{0, @dots{}, n@}} spent in state @math{i}, assuming that the state occupancy probabilities at time zero are @var{p0}. If this function is called with two arguments, @code{@var{M}(i)} is the expected fraction of steps spent in state @math{i} until absorption. @end table @seealso{dtmcexps} @end deftypefn @c @node Mean time to absorption (DTMC) @subsection Mean Time to Absorption The @emph{mean time to absorption} is defined as the average number of transitions that are required to enter an absorbing state, starting from a transient state or given initial state occupancy probabilities @math{{\bf \pi}(0)}. Let @math{t_i} be the expected number of transitions before being absorbed in any absorbing state, starting from state @math{i}. The vector @math{{\bf t} = [t_1, @dots{}, t_N]} can be computed from the fundamental matrix @math{\bf N} (@pxref{Expected number of visits (DTMC)}) as @iftex @tex $$ {\bf t} = {\bf 1 N} $$ @end tex @end iftex @ifnottex @math{t = 1 N} @end ifnottex @noindent where @math{{\bf 1} = [1, @dots{}, 1]}. Let @math{{\bf B} = [ B_{i, j} ]} be a matrix where @math{B_{i, j}} is the probability of being absorbed in state @math{j}, starting from transient state @math{i}. Again, using matrices @math{\bf N} and @math{\bf R} (@pxref{Expected number of visits (DTMC)}) we can write @iftex @tex $$ {\bf B} = {\bf N R} $$ @end tex @end iftex @ifnottex @math{B = N R} @end ifnottex @anchor{doc-dtmcmtta} @deftypefn {Function File} {[@var{t} @var{N} @var{B}] =} dtmcmtta (@var{P}) @deftypefnx {Function File} {[@var{t} @var{N} @var{B}] =} dtmcmtta (@var{P}, @var{p0}) @cindex mean time to absorption, DTMC @cindex absorption probabilities, DTMC @cindex fundamental matrix @cindex DTMC @cindex discrete time Markov chain @cindex Markov chain, discrete time Compute the expected number of steps before absorption for a DTMC with state space @math{@{1, @dots{} N@}} and transition probability matrix @var{P}. @strong{INPUTS} @table @code @item @var{P}(i,j) @math{N \times N} transition probability matrix. @code{@var{P}(i,j)} is the transition probability from state @math{i} to state @math{j}. @item @var{p0}(i) Initial state occupancy probabilities (vector of length @math{N}). @end table @strong{OUTPUTS} @table @code @item @var{t} @itemx @var{t}(i) When called with a single argument, @var{t} is a vector of length @math{N} such that @code{@var{t}(i)} is the expected number of steps before being absorbed in any absorbing state, starting from state @math{i}; if @math{i} is absorbing, @code{@var{t}(i) = 0}. When called with two arguments, @var{t} is a scalar, and represents the expected number of steps before absorption, starting from the initial state occupancy probability @var{p0}. @item @var{N}(i) @itemx @var{N}(i,j) When called with a single argument, @var{N} is the @math{N \times N} fundamental matrix for @var{P}. @code{@var{N}(i,j)} is the expected number of visits to transient state @var{j} before absorption, if the system started in transient state @var{i}. The initial state is counted if @math{i = j}. When called with two arguments, @var{N} is a vector of length @math{N} such that @code{@var{N}(j)} is the expected number of visits to transient state @var{j} before absorption, given initial state occupancy probability @var{P0}. @item @var{B}(i) @itemx @var{B}(i,j) When called with a single argument, @var{B} is a @math{N \times N} matrix where @code{@var{B}(i,j)} is the probability of being absorbed in state @math{j}, starting from transient state @math{i}; if @math{j} is not absorbing, @code{@var{B}(i,j) = 0}; if @math{i} is absorbing, @code{@var{B}(i,i) = 1} and @code{@var{B}(i,j) = 0} for all @math{i \neq j}. When called with two arguments, @var{B} is a vector of length @math{N} where @code{@var{B}(j)} is the probability of being absorbed in state @var{j}, given initial state occupancy probabilities @var{p0}. @end table @strong{REFERENCES} @itemize @item Grinstead, Charles M.; Snell, J. Laurie (July 1997). @cite{Introduction to Probability}, Ch. 11: Markov Chains. American Mathematical Society. ISBN 978-0821807491. @end itemize @seealso{ctmcmtta} @end deftypefn @c @node First passage times (DTMC) @subsection First Passage Times The First Passage Time @math{M_{i, j}} is the average number of transitions needed to enter state @math{j} for the first time, starting from state @math{i}. Matrix @math{\bf M} satisfies the property @iftex @tex $$ M_{i, j} = 1 + \sum_{k \neq j} P_{i, k} M_{k, j}$$ @end tex @end iftex @ifnottex @example @group ___ \ M_ij = 1 + > P_ij * M_kj /___ k!=j @end group @end example @end ifnottex To compute @math{{\bf M} = [ M_{i, j}]} a different formulation is used. Let @math{\bf W} be the @math{N \times N} matrix having each row equal to the stationary state occupancy probability vector @math{\bf \pi} for @math{\bf P}; let @math{\bf I} be the @math{N \times N} identity matrix (i.e., the matrix of all ones). Define @math{\bf Z} as follows: @iftex @tex $$ {\bf Z} = \left( {\bf I} - {\bf P} + {\bf W} \right)^{-1} $$ @end tex @end iftex @ifnottex @example @group -1 Z = (I - P + W) @end group @end example @end ifnottex @noindent Then, we have that @iftex @tex $$ M_{i, j} = {Z_{j, j} - Z_{i, j} \over \pi_j} $$ @end tex @end iftex @ifnottex @example @group Z_jj - Z_ij M_ij = ----------- \pi_j @end group @end example @end ifnottex According to the definition above, @math{M_{i,i} = 0}. We arbitrarily set @math{M_{i,i}} to the @emph{mean recurrence time} @math{r_i} for state @math{i}, that is the average number of transitions needed to return to state @math{i} starting from it. @math{r_i} is: @iftex @tex $$ r_i = {1 \over \pi_i} $$ @end tex @end iftex @ifnottex @example @group 1 r_i = ----- \pi_i @end group @end example @end ifnottex @anchor{doc-dtmcfpt} @deftypefn {Function File} {@var{M} =} dtmcfpt (@var{P}) @cindex first passage times @cindex mean recurrence times @cindex discrete time Markov chain @cindex Markov chain, discrete time @cindex DTMC Compute mean first passage times and mean recurrence times for an irreducible discrete-time Markov chain over the state space @math{@{1, @dots{}, N@}}. @strong{INPUTS} @table @code @item @var{P}(i,j) transition probability from state @math{i} to state @math{j}. @var{P} must be an irreducible stochastic matrix, which means that the sum of each row must be 1 (@math{\sum_{j=1}^N P_{i j} = 1}), and the rank of @var{P} must be @math{N}. @end table @strong{OUTPUTS} @table @code @item @var{M}(i,j) For all @math{1 @leq{} i, j @leq{} N}, @math{i \neq j}, @code{@var{M}(i,j)} is the average number of transitions before state @var{j} is entered for the first time, starting from state @var{i}. @code{@var{M}(i,i)} is the @emph{mean recurrence time} of state @math{i}, and represents the average time needed to return to state @var{i}. @end table @strong{REFERENCES} @itemize @item Grinstead, Charles M.; Snell, J. Laurie (July 1997). @cite{Introduction to Probability}, Ch. 11: Markov Chains. American Mathematical Society. ISBN 978-0821807491. @end itemize @seealso{ctmcfpt} @end deftypefn @c @c @c @node Continuous-Time Markov Chains @section Continuous-Time Markov Chains A stochastic process @math{@{X(t), t @geq{} 0@}} is a continuous-time Markov chain if, for all integers @math{n}, and for any sequence @math{t_0, t_1 , @dots{}, t_n, t_{n+1}} such that @math{t_0 < t_1 < @dots{} < t_n < t_{n+1}}, we have @iftex @tex $$\eqalign{P(X(t_{n+1}) = x_{n+1}\ |\ X(t_n) = x_n, X(t_{n-1}) = x_{n-1}, \ldots, X(t_0) = x_0) \cr &\hskip -8 em = P(X(t_{n+1}) = x_{n+1}\ |\ X(t_n) = x_n)}$$ @end tex @end iftex @ifnottex @math{P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)} @end ifnottex A continuous-time Markov chain is defined according to an @emph{infinitesimal generator matrix} @math{{\bf Q} = [Q_{i,j}]}, where for each @math{i \neq j}, @math{Q_{i, j}} is the transition rate from state @math{i} to state @math{j}. The matrix @math{\bf Q} must satisfy the property that, for all @math{i}, @math{\sum_{j=1}^N Q_{i, j} = 0}. @anchor{doc-ctmcchkQ} @deftypefn {Function File} {[@var{result} @var{err}] =} ctmcchkQ (@var{Q}) @cindex Markov chain, continuous time If @var{Q} is a valid infinitesimal generator matrix, return the size (number of rows or columns) of @var{Q}. If @var{Q} is not an infinitesimal generator matrix, set @var{result} to zero, and @var{err} to an appropriate error string. @end deftypefn Similarly to the DTMC case, a CTMC is @emph{irreducible} if every state is eventually reachable from every other state in finite time. @anchor{doc-ctmcisir} @deftypefn {Function File} {[@var{r} @var{s}] =} ctmcisir (@var{P}) @cindex Markov chain, continuous time @cindex continuous time Markov chain @cindex CTMC @cindex irreducible Markov chain Check if @var{Q} is irreducible, and identify Strongly Connected Components (SCC) in the transition graph of the DTMC with infinitesimal generator matrix @var{Q}. @strong{INPUTS} @table @code @item @var{Q}(i,j) Infinitesimal generator matrix. @var{Q} is a @math{N \times N} square matrix where @code{@var{Q}(i,j)} is the transition rate from state @math{i} to state @math{j}, for @math{1 @leq{} i \neq j @leq{} N}. @end table @strong{OUTPUTS} @table @code @item @var{r} 1 if @var{Q} is irreducible, 0 otherwise. @item @var{s}(i) strongly connected component (SCC) that state @math{i} belongs to. SCCs are numbered @math{1, 2, @dots{}}. If the graph is strongly connected, then there is a single SCC and the predicate @code{all(s == 1)} evaluates to true. @end table @end deftypefn @menu * State occupancy probabilities (CTMC):: * Birth-death process (CTMC):: * Expected sojourn times (CTMC):: * Time-averaged expected sojourn times (CTMC):: * Mean time to absorption (CTMC):: * First passage times (CTMC):: @end menu @node State occupancy probabilities (CTMC) @subsection State occupancy probabilities Similarly to the discrete case, we denote with @math{{\bf \pi}(t) = \left[\pi_1(t), @dots{}, \pi_N(t) \right]} the @emph{state occupancy probability vector} at time @math{t}. @math{\pi_i(t)} is the probability that the system is in state @math{i} at time @math{t @geq{} 0}. Given the infinitesimal generator matrix @math{\bf Q} and initial state occupancy probabilities @math{{\bf \pi}(0) = \left[\pi_1(0), @dots{}, \pi_N(0)\right]}, the occupancy probabilities @math{{\bf \pi}(t)} at time @math{t} can be computed as: @iftex @tex $${\bf \pi}(t) = {\bf \pi}(0) \exp( {\bf Q} t )$$ @end tex @end iftex @ifnottex @example @group \pi(t) = \pi(0) exp(Qt) @end group @end example @end ifnottex @noindent where @math{\exp( {\bf Q} t )} is the matrix exponential of @math{{\bf Q} t}. Under certain conditions, there exists a @emph{stationary state occupancy probability} @math{{\bf \pi} = \lim_{t \rightarrow +\infty} {\bf \pi}(t)} that is independent from @math{{\bf \pi}(0)}. @math{\bf \pi} is the solution of the following linear system: @iftex @tex $$ \left\{ \eqalign{ {\bf \pi Q} & = {\bf 0} \cr {\bf \pi 1}^T & = 1 } \right. $$ @end tex @end iftex @ifnottex @example @group / | \pi Q = 0 | \pi 1^T = 1 \ @end group @end example @end ifnottex @anchor{doc-ctmc} @deftypefn {Function File} {@var{p} =} ctmc (@var{Q}) @deftypefnx {Function File} {@var{p} =} ctmc (@var{Q}, @var{t}. @var{p0}) @cindex Markov chain, continuous time @cindex continuous time Markov chain @cindex Markov chain, state occupancy probabilities @cindex stationary probabilities @cindex CTMC Compute stationary or transient state occupancy probabilities for a continuous-time Markov chain. With a single argument, compute the stationary state occupancy probabilities @math{@var{p}(1), @dots{}, @var{p}(N)} for a continuous-time Markov chain with finite state space @math{@{1, @dots{}, N@}} and @math{N \times N} infinitesimal generator matrix @var{Q}. With three arguments, compute the state occupancy probabilities @math{@var{p}(1), @dots{}, @var{p}(N)} that the system is in state @math{i} at time @var{t}, given initial state occupancy probabilities @math{@var{p0}(1), @dots{}, @var{p0}(N)} at time 0. @strong{INPUTS} @table @code @item @var{Q}(i,j) Infinitesimal generator matrix. @var{Q} is a @math{N \times N} square matrix where @code{@var{Q}(i,j)} is the transition rate from state @math{i} to state @math{j}, for @math{1 @leq{} i \neq j @leq{} N}. @var{Q} must satisfy the property that @math{\sum_{j=1}^N Q_{i, j} = 0} @item @var{t} Time at which to compute the transient probability (@math{t @geq{} 0}). If omitted, the function computes the steady state occupancy probability vector. @item @var{p0}(i) probability that the system is in state @math{i} at time 0. @end table @strong{OUTPUTS} @table @code @item @var{p}(i) If this function is invoked with a single argument, @code{@var{p}(i)} is the steady-state probability that the system is in state @math{i}, @math{i = 1, @dots{}, N}. If this function is invoked with three arguments, @code{@var{p}(i)} is the probability that the system is in state @math{i} at time @var{t}, given the initial occupancy probabilities @var{p0}(1), @dots{}, @var{p0}(N). @end table @seealso{dtmc} @end deftypefn @noindent @strong{EXAMPLE} Consider a two-state CTMC where all transition rates between states are equal to 1. The stationary state occupancy probabilities can be computed as follows: @example @group @verbatim Q = [ -1 1; ... 1 -1 ]; q = ctmc(Q) @end verbatim @result{} q = 0.50000 0.50000 @end group @end example @c @c @c @node Birth-death process (CTMC) @subsection Birth-Death Process @anchor{doc-ctmcbd} @deftypefn {Function File} {@var{Q} =} ctmcbd (@var{b}, @var{d}) @cindex Markov chain, continuous time @cindex continuous time Markov chain @cindex CTMC @cindex birth-death process, CTMC Returns the infinitesimal generator matrix @math{Q} for a continuous birth-death process over the finite state space @math{@{1, @dots{}, N@}}. For each @math{i=1, @dots{}, N-1}, @code{@var{b}(i)} is the transition rate from state @math{i} to state @math{i+1}, and @code{@var{d}(i)} is the transition rate from state @math{i+1} to state @math{i}. Matrix @math{\bf Q} is therefore defined as: @tex $$ \pmatrix{ -\lambda_1 & \lambda_1 & & & & \cr \mu_1 & -(\mu_1 + \lambda_2) & \lambda_2 & & \cr & \mu_2 & -(\mu_2 + \lambda_3) & \lambda_3 & & \cr \cr & & \ddots & \ddots & \ddots & & \cr \cr & & & \mu_{N-2} & -(\mu_{N-2}+\lambda_{N-1}) & \lambda_{N-1} \cr & & & & \mu_{N-1} & -\mu_{N-1} } $$ @end tex @ifnottex @example @group / \ | -b(1) b(1) | | d(1) -(d(1)+b(2)) b(2) | | d(2) -(d(2)+b(3)) b(3) | | | | ... ... ... | | | | d(N-2) -(d(N-2)+b(N-1)) b(N-1) | | d(N-1) -d(N-1) | \ / @end group @end example @end ifnottex @noindent where @math{\lambda_i} and @math{\mu_i} are the birth and death rates, respectively. @seealso{dtmcbd} @end deftypefn @c @c @c @node Expected sojourn times (CTMC) @subsection Expected Sojourn Times Given a @math{N} state continuous-time Markov Chain with infinitesimal generator matrix @math{\bf Q}, we define the vector @math{{\bf L}(t) = \left[L_1(t), @dots{}, L_N(t)\right]} such that @math{L_i(t)} is the expected sojourn time in state @math{i} during the interval @math{[0,t)}, assuming that the initial occupancy probabilities at time 0 were @math{{\bf \pi}(0)}. @math{{\bf L}(t)} can be expressed as the solution of the following differential equation: @iftex @tex $$ { d{\bf L}(t) \over dt} = {\bf L}(t){\bf Q} + {\bf \pi}(0), \qquad {\bf L}(0) = {\bf 0} $$ @end tex @end iftex @ifnottex @example @group dL --(t) = L(t) Q + pi(0), L(0) = 0 dt @end group @end example @end ifnottex Alternatively, @math{{\bf L}(t)} can also be expressed in integral form as: @iftex @tex $$ {\bf L}(t) = \int_0^t {\bf \pi}(u) du$$ @end tex @end iftex @ifnottex @example @group / t L(t) = | pi(u) du / 0 @end group @end example @end ifnottex @noindent where @math{{\bf \pi}(t) = {\bf \pi}(0) \exp({\bf Q}t)} is the state occupancy probability at time @math{t}; @math{\exp({\bf Q}t)} is the matrix exponential of @math{{\bf Q}t}. If there are absorbing states, we can define the vector of @emph{expected sojourn times until absorption} @math{{\bf L}(\infty)}, where for each transient state @math{i}, @math{L_i(\infty)} is the expected total time spent in state @math{i} until absorption, assuming that the system started with given state occupancy probabilities @math{{\bf \pi}(0)}. Let @math{\tau} be the set of transient (i.e., non absorbing) states; let @math{{\bf Q}_\tau} be the restriction of @math{\bf Q} to the transient sub-states only. Similarly, let @math{{\bf \pi}_\tau(0)} be the restriction of the initial state occupancy probability vector @math{{\bf \pi}(0)} to transient states @math{\tau}. The expected time to absorption @math{{\bf L}_\tau(\infty)} is defined as the solution of the following equation: @iftex @tex $$ {\bf L}_\tau(\infty){\bf Q}_\tau = -{\bf \pi}_\tau(0) $$ @end tex @end iftex @ifnottex @example @group L_T( inf ) Q_T = -pi_T(0) @end group @end example @end ifnottex @anchor{doc-ctmcexps} @deftypefn {Function File} {@var{L} =} ctmcexps (@var{Q}, @var{t}, @var{p} ) @deftypefnx {Function File} {@var{L} =} ctmcexps (@var{Q}, @var{p}) @cindex Markov chain, continuous time @cindex expected sojourn time, CTMC With three arguments, compute the expected times @code{@var{L}(i)} spent in each state @math{i} during the time interval @math{[0,t]}, assuming that the initial occupancy vector is @var{p}. With two arguments, compute the expected time @code{@var{L}(i)} spent in each transient state @math{i} until absorption. @strong{Note:} In its current implementation, this function requires that an absorbing state is reachable from any non-absorbing state of @math{Q}. @strong{INPUTS} @table @code @item @var{Q}(i,j) @math{N \times N} infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition rate from state @math{i} to state @math{j}, @math{1 @leq{} i \neq j @leq{} N}. The matrix @var{Q} must also satisfy the condition @math{\sum_{j=1}^N Q_{ij} = 0}. @item @var{t} If given, compute the expected sojourn times in @math{[0,t]} @item @var{p}(i) Initial occupancy probability vector; @code{@var{p}(i)} is the probability the system is in state @math{i} at time 0, @math{i = 1, @dots{}, N} @end table @strong{OUTPUTS} @table @code @item @var{L}(i) If this function is called with three arguments, @code{@var{L}(i)} is the expected time spent in state @math{i} during the interval @math{[0,t]}. If this function is called with two arguments @code{@var{L}(i)} is the expected time spent in transient state @math{i} until absorption; if state @math{i} is absorbing, @code{@var{L}(i)} is zero. @end table @seealso{dtmcexps} @end deftypefn @noindent @strong{EXAMPLE} Let us consider a 4-states pure birth continuous process where the transition rate from state @math{i} to state @math{i+1} is @math{\lambda_i = i \lambda} (@math{i=1, 2, 3}), with @math{\lambda = 0.5}. The following code computes the expected sojourn time for each state @math{i}, given initial occupancy probabilities @math{{\bf \pi}_0=[1, 0, 0, 0]}. @example @group @verbatim lambda = 0.5; N = 4; b = lambda*[1:N-1]; d = zeros(size(b)); Q = ctmcbd(b,d); t = linspace(0,10,100); p0 = zeros(1,N); p0(1)=1; L = zeros(length(t),N); for i=1:length(t) L(i,:) = ctmcexps(Q,t(i),p0); endfor plot( t, L(:,1), ";State 1;", "linewidth", 2, ... t, L(:,2), ";State 2;", "linewidth", 2, ... t, L(:,3), ";State 3;", "linewidth", 2, ... t, L(:,4), ";State 4;", "linewidth", 2 ); legend("location","northwest"); legend("boxoff"); xlabel("Time"); ylabel("Expected sojourn time"); @end verbatim @end group @end example @c @c @c @node Time-averaged expected sojourn times (CTMC) @subsection Time-Averaged Expected Sojourn Times @anchor{doc-ctmctaexps} @deftypefn {Function File} {@var{M} =} ctmctaexps (@var{Q}, @var{t}, @var{p0}) @deftypefnx {Function File} {@var{M} =} ctmctaexps (@var{Q}, @var{p0}) @cindex Markov chain, continuous time @cindex time-alveraged sojourn time, CTMC @cindex continuous time Markov chain @cindex CTMC Compute the @emph{time-averaged sojourn time} @code{@var{M}(i)}, defined as the fraction of the time interval @math{[0,t]} (or until absorption) spent in state @math{i}, assuming that the state occupancy probabilities at time 0 are @var{p}. @strong{INPUTS} @table @code @item @var{Q}(i,j) Infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition rate from state @math{i} to state @math{j}, @math{1 @leq{} i,j @leq{} N}, @math{i \neq j}. The matrix @var{Q} must also satisfy the condition @math{\sum_{j=1}^N Q_{ij} = 0} @item @var{t} Time. If omitted, the results are computed until absorption. @item @var{p0}(i) initial state occupancy probabilities. @code{@var{p0}(i)} is the probability that the system is in state @math{i} at time 0, @math{i = 1, @dots{}, N} @end table @strong{OUTPUTS} @table @code @item @var{M}(i) When called with three arguments, @code{@var{M}(i)} is the expected fraction of the interval @math{[0,t]} spent in state @math{i} assuming that the state occupancy probability at time zero is @var{p}. When called with two arguments, @code{@var{M}(i)} is the expected fraction of time until absorption spent in state @math{i}; in this case the mean time to absorption is @code{sum(@var{M})}. @end table @seealso{ctmcexps} @end deftypefn @noindent @strong{EXAMPLE} @example @group @verbatim lambda = 0.5; N = 4; birth = lambda*linspace(1,N-1,N-1); death = zeros(1,N-1); Q = diag(birth,1)+diag(death,-1); Q -= diag(sum(Q,2)); t = linspace(1e-5,30,100); p = zeros(1,N); p(1)=1; M = zeros(length(t),N); for i=1:length(t) M(i,:) = ctmctaexps(Q,t(i),p); endfor clf; plot(t, M(:,1), ";State 1;", "linewidth", 2, ... t, M(:,2), ";State 2;", "linewidth", 2, ... t, M(:,3), ";State 3;", "linewidth", 2, ... t, M(:,4), ";State 4 (absorbing);", "linewidth", 2 ); legend("location","east"); legend("boxoff"); xlabel("Time"); ylabel("Time-averaged Expected sojourn time"); @end verbatim @end group @end example @c @c @c @node Mean time to absorption (CTMC) @subsection Mean Time to Absorption @anchor{doc-ctmcmtta} @deftypefn {Function File} {@var{t} =} ctmcmtta (@var{Q}, @var{p}) @cindex Markov chain, continuous time @cindex continuous time Markov chain @cindex CTMC @cindex mean time to absorption, CTMC Compute the Mean-Time to Absorption (MTTA) of the CTMC described by the infinitesimal generator matrix @var{Q}, starting from initial occupancy probabilities @var{p}. If there are no absorbing states, this function fails with an error. @strong{INPUTS} @table @code @item @var{Q}(i,j) @math{N \times N} infinitesimal generator matrix. @code{@var{Q}(i,j)} is the transition rate from state @math{i} to state @math{j}, @math{i \neq j}. The matrix @var{Q} must satisfy the condition @math{\sum_{j=1}^N Q_{i j} = 0} @item @var{p}(i) probability that the system is in state @math{i} at time 0, for each @math{i=1, @dots{}, N} @end table @strong{OUTPUTS} @table @code @item @var{t} Mean time to absorption of the process represented by matrix @var{Q}. If there are no absorbing states, this function fails. @end table @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998. @end itemize @seealso{ctmcexps} @end deftypefn @noindent @strong{EXAMPLE} Let us consider a simple model of redundant disk array. We assume that the array is made of 5 independent disks and can tolerate up to 2 disk failures without losing data. If three or more disks break, the array is dead and unrecoverable. We want to estimate the Mean-Time-To-Failure (MTTF) of the disk array. We model this system as a 4 states continuous Markov chain with state space @math{@{ 2, 3, 4, 5 @}}. In state @math{i} there are exactly @math{i} active (i.e., non failed) disks; state @math{2} is absorbing. Let @math{\mu} be the failure rate of a single disk. The system starts in state @math{5} (all disks are operational). We use a pure death process, where the death rate from state @math{i} to state @math{i-1} is @math{\mu i}, for @math{i = 3, 4, 5}). The MTTF of the disk array is the MTTA of the Markov Chain, and can be computed as follows: @example @group @verbatim mu = 0.01; death = [ 3 4 5 ] * mu; birth = 0*death; Q = ctmcbd(birth,death); t = ctmcmtta(Q,[0 0 0 1]) @end verbatim @result{} t = 78.333 @end group @end example @c @c @c @node First passage times (CTMC) @subsection First Passage Times @anchor{doc-ctmcfpt} @deftypefn {Function File} {@var{M} =} ctmcfpt (@var{Q}) @deftypefnx {Function File} {@var{m} =} ctmcfpt (@var{Q}, @var{i}, @var{j}) @cindex first passage times, CTMC @cindex CTMC @cindex continuous time Markov chain @cindex Markov chain, continuous time Compute mean first passage times for an irreducible continuous-time Markov chain. @strong{INPUTS} @table @code @item @var{Q}(i,j) Infinitesimal generator matrix. @var{Q} is a @math{N \times N} square matrix where @code{@var{Q}(i,j)} is the transition rate from state @math{i} to state @math{j}, for @math{1 @leq{} i, j @leq{} N}, @math{i \neq j}. Transition rates must be nonnegative, and @math{\sum_{j=1}^N Q_{i j} = 0} @item @var{i} Initial state. @item @var{j} Destination state. @end table @strong{OUTPUTS} @table @code @item @var{M}(i,j) average time before state @var{j} is visited for the first time, starting from state @var{i}. We let @code{@var{M}(i,i) = 0}. @item m @var{m} is the average time before state @var{j} is visited for the first time, starting from state @var{i}. @end table @seealso{ctmcmtta} @end deftypefn queueing/doc/references.texi0000664000175000017500000001541413356152302016050 0ustar morenomoreno@c This file has been automatically generated from references.txi @c by proc.m. Do not edit this file, all changes will be lost @c -*- texinfo -*- @c Copyright (C) 2012, 2016 Moreno Marzolla @c @c This file is part of the queueing package. @c @c The queueing package is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public License @c as published by the Free Software Foundation; either version 3 of @c the License, or (at your option) any later version. @c @c The queueing package is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied warranty @c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with the queueing package; see the file COPYING. If not, see @c . @node References @chapter References @table @asis @item [Aky88] Ian F. Akyildiz, @cite{Mean Value Analysis for Blocking Queueing Networks}, IEEE Transactions on Software Engineering, vol. 14, n. 2, april 1988, pp. 418--428. DOI @uref{http://dx.doi.org/10.1109/32.4663, 10.1109/32.4663} @item [Bar79] Y. Bard, @cite{Some Extensions to Multiclass Queueing Network Analysis}, proc. 4th Int. Symp. on Modelling and Performance Evaluation of Computer Systems, feb. 1979, pp. 51--62. @item [BCMP75] F. Baskett, K. Mani Chandy, R. R. Muntz, and F. G. Palacios. 1975. @cite{Open, Closed, and Mixed Networks of Queues with Different Classes of Customers}. J. ACM 22, 2 (April 1975), 248—260, DOI @uref{http://doi.acm.org/10.1145/321879.321887, 10.1145/321879.321887} @item [BGMT98] G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998. @item [Buz73] J. P. Buzen, @cite{Computational Algorithms for Closed Queueing Networks with Exponential Servers}, Communications of the ACM, volume 16, number 9, september 1973, pp. 527--531. DOI @uref{http://doi.acm.org/10.1145/362342.362345, 10.1145/362342.362345} @item [C08] G. Casale, @cite{A note on stable flow-equivalent aggregation in closed networks}. Queueing Syst. Theory Appl., 60:193–-202, December 2008, DOI @uref{http://dx.doi.org/10.1007/s11134-008-9093-6, 10.1007/s11134-008-9093-6} @item [CMS08] G. Casale, R. R. Muntz, G. Serazzi, @cite{Geometric Bounds: a Non-Iterative Analysis Technique for Closed Queueing Networks}, IEEE Transactions on Computers, 57(6):780-794, June 2008. DOI @uref{http://doi.ieeecomputersociety.org/10.1109/TC.2008.37, 10.1109/TC.2008.37} @item @anchor{GrSn97}[GrSn97] C. M. Grinstead, J. L. Snell, (July 1997). @cite{Introduction to Probability}. American Mathematical Society. ISBN 978-0821807491; this excellent textbook is @uref{http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf, available in PDF format} and can be used under the terms of the @uref{http://www.gnu.org/copyleft/fdl.html, GNU Free Documentation License (FDL)} @item [Jac04] J. R. Jackson, @cite{Jobshop-Like Queueing Systems}, Vol. 50, No. 12, Ten Most Influential Titles of "Management Science's" First Fifty Years (Dec., 2004), pp. 1796-1802, @uref{http://www.jstor.org/stable/30046149, available online} @item [Jai91] R. Jain, @cite{The Art of Computer Systems Performance Analysis}, Wiley, 1991, p. 577. @item [HsLa87] C. H. Hsieh and S. Lam, @cite{Two classes of performance bounds for closed queueing networks}, PEVA, vol. 7, n. 1, pp. 3--30, 1987 @item [Ker84] T. Kerola, @cite{The Composite Bound Method (CBM) for Computing Throughput Bounds in Multiple Class Environments}, Performance Evaluation, Vol. 6 Isue 1, March 1986, DOI @uref{http://dx.doi.org/10.1016/0166-5316(86)90002-7, 10.1016/0166-5316(86)90002-7}; also available as @uref{http://docs.lib.purdue.edu/cstech/395/, Technical Report CSD-TR-475}, Department of Computer Sciences, Purdue University, mar 13, 1984 (Revised aug 27, 1984). @item [LZGS84] E. D. Lazowska, J. Zahorjan, G. Scott Graham, and K. C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @uref{http://www.cs.washington.edu/homes/lazowska/qsp/, available online}. @item [ReKo76] M. Reiser, H. Kobayashi, @cite{On The Convolution Algorithm for Separable Queueing Networks}, In Proceedings of the 1976 ACM SIGMETRICS Conference on Computer Performance Modeling Measurement and Evaluation (Cambridge, Massachusetts, United States, March 29--31, 1976). SIGMETRICS '76. ACM, New York, NY, pp. 109--117. DOI @uref{http://doi.acm.org/10.1145/800200.806187, 10.1145/800200.806187} @item [ReLa80] M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313--322. DOI @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} @item [Sch79] P. Schweitzer, @cite{Approximate Analysis of Multiclass Closed Networks of Queues}, Proc. Int. Conf. on Stochastic Control and Optimization, jun 1979, pp. 25—29 @item [Sch80] H. D. Schwetman, @cite{Testing Network-of-Queues Software}, @uref{http://docs.lib.purdue.edu/cstech/259/, Technical Report CSD-TR 330}, Department of computer Sciences, Purdue University, 1980 @item [Sch81] H. D. Schwetman, @cite{Some Computational Aspects of Queueing Network Models}, @uref{http://docs.lib.purdue.edu/cstech/285/, Technical Report CSD-TR-354}, Department of Computer Sciences, Purdue University, feb, 1981 (revised). @item @anchor{Sch82}[Sch82] H. D. Schwetman, @cite{Implementing the Mean Value Algorithm for the Solution of Queueing Network Models}, @uref{http://docs.lib.purdue.edu/cstech/286/, Technical Report CSD-TR-355}, Department of Computer Sciences, Purdue University, feb 15, 1982. @item [Sch84] T. Kerola, H. D. Schwetman, @cite{Performance Bounds for Multiclass Models}, @uref{http://docs.lib.purdue.edu/cstech/399/, Technical Report CSD-TR-479}, Department of Computer Sciences, Purdue University, 1984. @item [Tij03] H. C. Tijms, @cite{A first course in stochastic models}, John Wiley and Sons, 2003, ISBN 0471498807, ISBN 9780471498803, DOI @uref{http://dx.doi.org/10.1002/047001363X, 10.1002/047001363X} @item [ZaWo81] J. Zahorjan and E. Wong, @cite{The solution of separable queueing network models using mean value analysis}. SIGMETRICS Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI @uref{http://doi.acm.org/10.1145/1010629.805477, 10.1145/1010629.805477} @item [Zeng03] G. Zeng, @cite{Two common properties of the erlang-B function, erlang-C function, and Engset blocking function}, Mathematical and Computer Modelling, Volume 37, Issues 12-13, June 2003, Pages 1287-1296 DOI @uref{http://dx.doi.org/10.1016/S0895-7177(03)90040-9, 10.1016/S0895-7177(03)90040-9} @end table queueing/doc/qn_closed_multi.pdf0000664000175000017500000001304413356152314016710 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ•VMo1½ûWøX2x<þ¼RWÚq@P åcƒÔæÀßg¼Ù/ËnªÔÄÏž™÷žÇv¬´®ýMŸÇ“yq›íýÙÈ>øh™qÞÞ¾13”lqä¢=)’]ÊÕ†€j´‰Ž'ûòÀ? Úa"¾¯_Ìå'ߦ|V¨d~^¹D(öp2W×oß=;|7•ß?Çì(°vûpg®^};ÿðmvÇ×p ÎÛØÞ’ÆÙ}›i• DG)¶Jsp‰ÓðºL—…( g”j„Ð:mGBá ì¿2ÒJÆF@Ìm—À…˜UÁX~ÌÈO„oºúå¸ÛB¿VŽ·%EÇŽ¡ã·Ý ¯‡Oç³—³ßÑñ󆳉‘Éëïûù Nópendstream endobj 6 0 obj 792 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœT{PSW¾—$÷žuÙÔ’’" ÓÚ¾(b­®SS­ ˆÚbQêƒZkÕUXŸ»µÓiÇeÛ™s™ËÎìÕٙݿ÷¿sÎ7ó;¿ï÷}ßǸaŽãár¥¬"6M­ÌW=¿¿IGáô²0:š©ùÌù l†cà.â¸!Þ^"¯–wÙùóqTˆþç~ ιå[a¢!`ú«ˆÙFgƒm#XH%­‰FãF @iô´pÐíÿëtü¼x&3ø>d0È,ڷ惜ݪÆU]C>-ªï3zé÷û#¾¸ŠÖÝ\*8ƒn o„M(šWGX,Ífh†õ­uí§¦½‚õiY›Ò‡ ï•L• WvW@…(·T½{sñèœF\ì8H8Üm­vwÀΖ~3œ1û6y£f®MÝü¼âÄŽ ƒM«» >èýg//‰ïóéÔúKiSt¤/ââCôÆ}¶:åºPO-4]! Ê"á„eÀàÓŽäõ¤B›°'IÓSéóõzûÚ¬íV‡¤ÅeuBðõ}æWeŠSH&6¥Ú”'ÓVRrXÂö”ʽ öN\ îj?\Œ: {;‡GYˆ‰{(„JKÎXN•5è (VŸ<-i#m—C£è7AÀ§/@/êCŸðgs¨æ¹8óK…w\&["Xøˆ´®n4mhUèD¹¾•ê²Þhy´¥ÛzΠîÓ¾ËC#Wàu8N– „V‹eåë&PŠTèw8ü(êjÎò·R³²’²µjÄ|4½ôÔ\ÄÌÜêGKß²V¨÷[Û]ÖÛ!²ÉÎÄeð ¤ÓÖÙÚisC‘ÏU“+a dK‚©~K3§ïÒýwpôíFÑÂÚöÂu9VÓ@ õHúý§îÂѳî½–‘¥-(—Ê ¥zi¯%rìçá¡›<¾˜¶fý'qkVJ˜ÍÌNž‘~…äS]ô.7úS1ºèáoGíáá³má¿Ã°ZAp endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001106 00000 n 0000005112 00000 n 0000001047 00000 n 0000000896 00000 n 0000000015 00000 n 0000000877 00000 n 0000001171 00000 n 0000001272 00000 n 0000001623 00000 n 0000001212 00000 n 0000001242 00000 n 0000001893 00000 n 0000003691 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<69D656FF84EB0E81886A718D41ED3B26><69D656FF84EB0E81886A718D41ED3B26>] >> startxref 5235 %%EOF queueing/doc/gpl.texi0000664000175000017500000010452213356152303014511 0ustar morenomoreno@c This file has been automatically generated from gpl.txi @c by proc.m. Do not edit this file, all changes will be lost @node Copying @appendix GNU GENERAL PUBLIC LICENSE @cindex warranty @cindex copyright @center Version 3, 29 June 2007 @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{http://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{http://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. queueing/doc/power.png0000664000175000017500000004574113356152312014705 0ustar morenomoreno‰PNG  IHDR·)Í “Û %iCCPiccxÚ••gP“YÇïó<é…@B‡PC‘*%€”Z(Ò«¨@èPElˆ¸+Šˆ4EE\•"kE ‹‚tƒ,ʺqQAyAß÷ý°ÿ™{ÏoþsæÞsÏùp ˆƒeÁË{bRºÀÛÉŽÌß)ŒŸ–Âñôtÿ¨w#Z‰÷tÁ¿!"2¿—W.?E”½ÌšYé)+|t™éáñ_øì – \æ+ý•Ǿä|eÑ—_oîò«PàHÑßqøwüß{W¤Â¤ÇFEf3}’£Ò³Â‘Ì´•Nð¸\¦§ 9*6!ò»‚ÿUò?(=2;}%r“S6 b£cÒ™ÿw¨‘¡!ø6‹7^_z 1úÿw>+úæ%×ÀžÙ÷Í ¯ sÒ¾yjË}¥äÐq‡Ÿ!Èüê¡V64   T&ÐFÀ X[à\€ðA`àƒ ä‚ }à ¨µ 4Vpt‚óà ¸nƒ»`<B0 ^x ÂBdˆÉ@J:¤AlÈr€Ü o( …¢¡$(Ê…vBEP)TÕAMÐ/Ð9è t„BãÐ ô7ôF`L‡` XfÃØö…×ÃÑp*œçÃ{á ¸> wÀWàÛð0,„_Âs@ˆQFt6ÂE<`$  [‘B¤©GZ‘n¤¹‡‘Yä ƒ¢¡˜(]”%Êå‡â£RQ[QŨ*Ô Tªu5Ž¡>£Éhy´ÚÍC¢£ÑYèt9ºÝ޾†FO¢ßa0†…1Ã8c‚0q˜Í˜bÌaLæ2f3™Ãb±2X¬Ö†MÇ`+±'±—°CØIì{§„3Â9â‚qI¸<\9®w7„›Â-àÅñêx ¼>¿ _‚oÀwãïà'ñ  ‹`Eð%Äv*­„k„1Â"‘¨B4'zc‰Û‰ÄSÄÄq╤Mâ’BH¤½¤ã¤Ë¤‡¤7d2YƒlK&§“÷’›ÈWÉOÉïÅhbzb<±±mbÕbbCb¯(xŠ:…CÙ@É¡”SÎPîPfÅñââ\ñ0ñ­âÕâçÄGÅç$h†‰ÅÍ7%¦©XªÕAͧ£^¥NК*KãÓvÒh×h“t EçÑãèEôŸét‘$UÒXÒ_2[²Zò‚¤04¥4Õ4m4}~Æqæî‹u/&_¦¼\˜-øSâÏšWš¯ÎþeûW¿(P4ùZðzéïâ72oŽ¿5~Û3ç9÷ô]â»…ùÂ÷2ïO|`èûðqj!k»XñIëS÷g×ÏcK‰KKÿB,¾±^¿ cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿ«1Í pHYsdd–ÅÝtIMEâ ë QrAOIDATxÚíMˆ#[vç†Áx5hf[´‹Xšé€™×éC#»;-/¼°¬J»±ThÒg5ØCÖÊ ¥ÜÞ ÎÊ…6VÍs®¤EÈ k1¹2ˆÉÅl„0ZiÈ£ÕÀ@Mž:uëF„BJ}DÜ{ãÆÿW¼— E(t¯>þ:qîùp>ÒS«9_¨Tz=Ý£!z=ÇñýCaH'«gÎâŒû’þYŽ@Å,À.ð€g¹e Ãn×q&Ýã¡#ûµýp¡ÞöÌâŒúä6‹9 ²88È-ø*·„ëòí ðý^-«Éd>çû‚€þÎçâo·+Ž¡£È6ŒŠ5ŸƒK ¾?$Ÿ=yÝãyÝ.Ý#Î&ž‘¶é,¼%ÍçÜ|T|ÉGÆŸŸ’çˆo‘ÆŸ;†d‹özÑ3ÈsoîÏNÈmôõØ=§m³âwÂ÷éqѽt¿x%å» Ô¹1¹­Tè¶ïW*†çU*ôål4x¿ãxýåmºì–ÇÐ^ßw]i¶Û•J­FŽ úš‡¡÷L£Q©´ÛÑçŽÅг{IHï×jüív£Ñn;K,Óu=/ “ŠÏ!ùÈèsÉ£ä9’ãˆ?:9wf2¡9Öjt??wrorv¼=vÏiÛ¬hlív­FÇò^i£?v0pÝøÈÈ-øD_oÿ3ô?ã8üu¦¯ë§OÝ.É,É…ãÐW”¾¾tŒ¸Ì•R=«ã°õÄb>™¸.mM&|túQrDñ‹xù|o'Ë|ôQÉ9Ä)H%Ï‘GôÑ›sg&Çévù~×Mž;¾wsv¼•|=vÍiÛ¬‡0ø§óÓ'Ï?—ôz7ðR1ÁiT6 ·àù+íºµÏ´Ûôufy%H"økN~]ß÷¼Á`2©TȾsÝÉgÈßKǦy}Ãd–¾ì$i—òñ£äˆ¶ÉmTæ¤È‰TôQÉ9¤ dò¨írË#çGoÎ=~š‘ãüÅ_ÄÏß+\ò¬òLÑ×cל¶ÍJÜ++¤[<ý¨Â«È-HX–Ñ/¯øZ»î`Ðh ËŠ.kk_¡c’K=|!L—ú|v:Å>$Ÿ+~”Ñar»ù¨äÒ…is¦Ûä6züæÜãçàG¼y?w|/7Mn“¯Ç®9+·ä m«È-Ø[iE dÉÒ×™|Ša8÷‘.U{=q Ùbô7.·ôÈèe±X¢ „¥˜v”ÑarK6÷6Kçð’u+fºÜnÎ!d(]Hë–Ïß›nÝn¾»ætœÜ’#®SÔ|¶@È-Ø[’^z!÷ý%}Aé2˜Eƒ¾´ì!¤Åú—[! aÈvZ·ËK3q¯aò(9¢èE<íM“[ụýi¾ÛèÒ…is¦ûÈíæÜTžE»Í¾Ûè¹ã{7gTùzìšÓqrË[Ÿ T¹rË—›äÑ¥E¾G.»»ˆŽñ<×%a¡í¸Ü’`ð:<]SèK^Ãè‚Zò(9" Šd q4irKòDã¤x>šÏÁ#‰Ï!]˜6g—Ûø壓sgHPéõq]^ýŸ;¹79;zŽÍ×c×œŽ‘[úÙ£Ûr™¨r R™Ïi)h÷1t)½ëÞKG±(ÑöæW§|ÜÄó¨÷*ÊÁÞr+S7‹:Ç»?¥5ÍãÒ}\J¤ÝŽÄ›L’6ñÏþËÿçßþwñï»Xû•rüûþ_~ÿ/uóƼ1ïìþý‡µT²_þ—‹ÿx€u+ê.‰F_Û¡î¢B`Ó›æEåššÒñV¦U[úæ›ï|ççÿû¯¿ðí·“’Ð|F÷0oÌóÎŽ_ü⯿òï|ÿ_¸TFYUX­TÇ”v[Ó<ª³müAõð©• UMJî7Ï6*; wŒî1`Þ˜7æß|óƒ(·ôRÅ}·ó9ytéBŽ7Í㪠ì«Ê­ïsßÖ0…££Ã‚Ü– Ì»\”uÞGÈ-ÑëqŸ¤$,£ñ¦yA nqÿVq-˜É­ä° ·eó.e÷Ar»ÙTl [W8 x+Þ4›u°Lg’ç€Ü Êú1ļËEYç}Ü’u*:,qg¨^„–äRÞ¿­iáºÝ®lãÇ[F–ä¶L`Þ墬ó>Й@I Ô–ÎuY^ÙI@/_´]]zÓ<"¸?жø¸d÷ª²¾{y–µåA¾Ûmméâ÷ooH{¤¸n;r °ƒåVÙ° ·«€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü‚™Í¦³^ë~}A±€Ü‚Y.I\>>óáÃûg~È›7ïc|ŒñøñÙL÷û òr b=úøH"ÐíBZõA’<êþ4€lÜ–’ÖñXHë»wù ÈÛ·ï MÞ¯OoÞt»Ã!ì][€Ü–”ñøË•ä¦Û¾øúÆz÷ùÆ] |±[Ôß¾ýða<^.uϜ䶄ŒÇoßî–ÖHHð×Ál6v»oÞ$ß›wïèKtEr[*Öë£_âwïxÙf8ÄJ»‰%œvÏn1Ü–†å2.µ>Àr- ´x¹éf€g·h@nKÁrùáCôkúñ#¤¶x¬×ãñ‡›Ž 7oàÙ-[ë™N£—£$µp›å2ݳûö-yvulrk5ñøƒ·oÇcÝ#Ù1›¥yvß¿ÇÏ©©@n­%ðþ=¤ÖV’žÝ·oáÏ5È­…$ãÞ¿Ç*¶ýg·Û.#ü¸šäÖ2Pn†CñÎü¨{, äÖ"hiTüÜ‹k[K@ü,—“ /®Y@n-ñ Îz-®sàÅ5 ÈmÁy|DüH^\ó€ÜšåR.‹!þÄ×4 ·…Fþ þ¤/®Y@n Ìã#•¸ ¶/®I@n ËzÍ—Šög‹…× ·……­–zÝuÏÏu˜ ¼¸f¹-(Ó)}¾ÿýWÏt:ºÇÌ^\€ÜˆÕêþÞ÷«Õ‡‡õšÃ¿þð_}áéI÷è€ÙÀ‹«ÈmA¸»;?ÒÚé|üÈ_œñøþþì ö-Øxqõ¹-Ϋ¯üþïG¿2ÕêÝîñb/®N ·F²ZF¾vöð îHhÏÏ;ш½pïÞé%("ðâêrkÒm ï¿¿ç€/áH@8xqu¹5އé6Ø ñZ.á{§/® ·Fpqqv&·HhÏÎ|4Z­’Grí¯·oÓün£E-èž (ðâªrkOO$°Q?í¶<1a“¤9x1íìlS¢H^\Õ@n €…òòò¥ãDý¯n7m/‹6BÂÀþÀ‹«È­päìýýKÇqý¯7o¶]ú‰`18ÀþÀ‹«È­v„Uú’@ÔÿÚe…p*DÔ ÀKH/Çb7[íìçJõ¿Þ¿ßuI7’À¡H/.,Ü<Üjçáê ¼äJ`Û›7/•ß¾ÌÀvÖk!¸ðáæä¶ˆú_áî‘[àæ䶈ú_HÛyÁÍÈmi»‡ÄF®V¾pÜ|ÜÏlvø"U CÊ8nž@nµrw×é¼Tœ?þoßr^¤<€càæäV+/'8[ÿ )àX ¸y¹Õ×°Ý•àpJý/¤<€càæäVë,_JpØUÿë%òŽg6™fÜì€Üj„–³v¹D6ûããqçGÊ8nö@nµñôDr[­nÛ¿»þyÁÍÈ­F¨‘ùö‹ý—ê7ÜlÜÊ>õ¿ög4B„8n–d$·AàyŽãº/‰d¶Ût\¯'ž¾òÌæ£Ê.·ûÕÿÚÕêò’œHyÇÁÍŽLä6 I2Ãp0¨T„¦Ón{Þ|>8ÎdBOîyA@RײËí¾õ¿öa±àp³—»E7+2‘ÛÉÄqÄéj5ú;Ÿw»½^Æ CÇ ºÕ~æÓ']z|R¤}¿Ùœ|e>×ý2eÏÝÝö¨¬ë‰”‡ÑH÷¬A1àOJ%k6ßý,ë–EôÓ§Fƒ¬Ò^Ïq Ï«TÄýŒ”åÁÀuy+ ÓÄÔ÷_¿®}e·Å\D8Á!ÝÞÌ£þ×Å= àX ¸ÇRÉ^¿þé·-•‘£ÀóH>…Õ*l]A·+¶Ij{=Ïk4œgÈÁ?—íÎNpHŸã1õ¿^b±à_Ø·àX ¸§“adI$ùn{=²\‰n—íWÞŠÊ/É­ï;¹°ш˲ýr»]üŽ©ÿµwwçç/Ã`ÜSÉ8¬×£E³JEšÏÒ˜&‘­Tø8’[Z0“[òXnÙ•žàpLý/ÔÁ=Lä6nµ’“€·È®ŽÃËgô)²e“Ûí®„cë )¸øŒNF‘ bQ¬ñ ……ñâV»ÝhÄt]JI C޼å-zT¹œ ÿð¿(vÓ•pJý¯ýY­òŽGî›7Y®.”ƒŒœ ”¼P«¹ÏìRd‚çÑVr ,ÈÑàº,¯´ÅÇÅ#l—["-Fà”ú_û2U«ˆP§Á=–Ì|·ó9/‡1¼<–ví‘âºí8ûåv“Së탈P@Ê8îq f‚!¨ªÿuw‡”p:Üc€Ü‚ºú_HyYÁ=È­b:´ôÝlëí† Õ*ì[pÜCÜ*eµbßi26 »ú_û@)èóNG .ª2ïäV)÷÷i ÿã_eWÿ •ÁEÏ‘}€Ü*…âm78“,ßh[òAED-@n²ZqT@Ü• ª$,ÿE÷ø8އCáe · yx ±=;‹ßË¥ÄUùm£,"pÁ© ‰é¾@n•²XÜÝÅ›A®×º.ÅD—,šSCa? ·šáªž `ççÛ«îpp(ìäV3ܹAÏ2™ˆ“@Â88ör«‘Þ Ë&8;#Áítt¿ øÀ¡ð2[E¬V÷÷›÷rêFÅM#/.t¾2ÀàPx È­"è½ZÛ‘¢¾­¾BÍ«ÕåeÚχ‡ÂK@nÁ q¹åÞ YvÜ@'p(ìr«‘àoÎȶº>{€Ca[%p @<Áa<ÆØ »€Ü*!Í•`R¥„ÅÂ÷‘î²…í@n•@%㮄¯• ¨Æñ Ù‡Â6 ·Êˆ[ú*%l‚t%¡`Æ•›I@nµ ¯RB:\ô<^Í€cá˜!Žf¹Õ‚ÎJ i°;!Y« €cᕉ·oáPˆ¹Õ‚ÎJ ipu°j5¨À±ˆµ s>ã&¹ÍNçþ>îÕ])a¿Qp p(l¹Í™´ª²º+% 8’@nsæî.éÕ_)À¡r›3\Â;ÓŠJ  ,À¡r›+•]‚2»RÂÓÓh¤{ ÀàPˆ¹Ív%œŸË{L®”°X\\P|‚îq{€C! ä6gžžhÍ_n›T)!ÉjÅ騀 ² äV)&UJHé {àP@n•bR¥„4„¯ùáA÷H€=À¡ €Ü*Ä´J iø>Éíå¥îq›€CÜæÆb‘L‰5­RB¯^ù>’yA¶À¡@@nsƒ¢Î΢U¶L«”ÊŒƒìC€Üæ'8H¹5±Rª€Cr››µP)”8 ·9‘Lp(^¥øoA¶À¡¹Í‰¤+¡X•F£³3¤;€¬…ÙL÷Hô¹Í‰N‡KºÌ®”„ÃÁ¢ÉÇœÎzÍËÅE1;²r›#òrÜäJ i ÝäÃtZf‡äV &WJH‡ŠÕP®îqÛ(³Cr«Ó+%¤AéÉ.œN™ [˜^)!³³‹ 8@ö”ס¹Í»»h‰î"TJ@%eu(@n3G4ÛE¨”€JÊêP€Üf׌•ATŨ”€JÊéP€ÜfÅÛÊ*%`¹ dO ÛŒyzНè»RÂjuwGKfºÇìC8ж„| ÛŒaW‚(Ï]¼J qÄê'€ì…áP÷HT¹ÍœÑÈ÷EdB±*%¤t|íWœlËSÜæJ±*%¤1!ÝäÅzÍßnW÷HԹ͑¢UJH‡—þ:Ýã6Âa’Åu·ä6GŠW)! ªÜ[­F›ïß—§è8ä6CV«è%w+%¤Ï uoA~”©è8ä6C(*áü\Ô(f¥TSž\Èm†°—“mATJ`_Ê ¹Í £ºZÑ*%°/e‰À…ÜfF<ÁÁ¶J ‹E§S­" ä»ÞÞ¼)úJÇn ·™miC¥„8HwyRŽ\Èmf\^V«" Ø•Ò¸¿ç²’ì* k8JÝîÕÈm¦pTBÑ+%¤ƒt/öGàBns ø•Ò`ßôÙ™îq[fŠ=+I ·9PüJ i¬VÕg|î¶GàBn3ÇŽJ iŒFZ/v7ÕÜfÂb!C¤¸R‚MËd¨Âî\Èm&P˜ÔÙ-”ÙR)=Ø ¹ÍÙó•8›#p!·À%¸iÍ^TJ°m™,Êbáû(ÇòÃÞ\ÈmpˆØþJ Hwyck.ä6d%0Û*%¤A¹s²±;Ùckîr†ãT*ívFïïõj_èõv=> ÛmÇq]q”ïWžÙ”ÖbÉíý=%ð®V¢R‚N~ Ò@þØ{ Üºn»=ŸçµÛÑûZÍÿÌd²ëñí¶çÍçƒãÐq¾ïyA@gKŠk±äV`_¥„4Ï ƒèñòÄÆ܃äv2q¶jI0£{jµÁ º=Ÿw»½^Ü&ÛÖq‚€nµÛ$×,ºtÞ¤Mìû¯_×jûY̦`g¥„4üê` ol‰À ©d¯_ÿôÛ½åv>_±¤Ü:N¯'¶×sœFÃó*Wɵx¼ëòVÎç›ÏäûÍæä+iG˜‡€Ù¼L&X,~ý¿ˆAä;ІRÉšÍw?;x©l>_þ“Õ꺵 ì|.¬V߯բëvÅ6Im¯çyä vr0ÄŸ¡x΄2„€ û"pˆL å­¸’ÕËvm£AË`d¹Ý.Û¯¼•_’[ßwr)„!y~7†U¹ít./ïî þ%.ƒm €*Äâ³-¸G&x^­¶}9Œe´R‘Þ é» ½•Š“\ r4вšØâãâ Å‘[ß'Á¹º*£m+²éDïaòKšÚ›Yï|.,^‚—ÇÒŽ£=R\·W¹å„Ö?øƒòÙ¶—æyõ Aa ODnñ¿a¨™p«Õý}»]†ÔÝt¸úÅ…îq»±#r›œlh{ên:ä¿=;C:/È[ô:ÒÛ)GYšíŒFºGÊ€¸Ûá¸ÀrÚ¶¨Ã†\ÈíI'¾]eâ0"p!·'ŒñââÿØR6P§6ò£ø¸Û£9;ûÕ_-úÛŸÕ*@¾=r{$‹Å«W?øl[†ãMÏ@Ñ)z.äöHîî\¶­€“™‘Ð ò¦Ø¸Û#¹¼dÛ%NèEÂÈ—õšãÜ‹yM ¹=’ós”‚„^ †"GàBnåÄ“PB¯ï¯VºÇl‡[°1r{"©¶­äé ž[ [¼ä"ÈíQ‡½îqPF†Ãb.SCn@ضE G èpnÑœyÛ#ø›¿)ªïH ÷÷ðà‚|™ÍŠ ¹=‚ßý]z£ÿüÏuÃDF# ëttØŽHé-R½ÈíÁŒÇü6ÿã?ꉉt:†„^7EŒÀ…ÜÌO~Boòoü†îq˜ÉjÅ æ¾ÀDJïp¨{$û¹=aÛÍI¯$ôƒÙl:åÕ‡Ùìêªß×=žc¸EIé…Ü9þÁîîtÄ\ؾEKs‹ºËåÍÈÆº¾®×9j¹¬×‹)·"F¨ÛÕ=’ý€Ü„¸|q]ØnÛ¡rŒHæÕËrÙï ›ïúºÙä[Ó©Ö~_Èí§OõúÍ ß‹´ô$¯6‹‘Ò ¹=¶m‹ò[ ÊÅzM+[²Qa½¹©×Å1òÞñøúZdEN§,Íãq½~}­{‡ÁßÉ·o‹– ¹=aÛ-—”ƒÇÇz]X¬³YÜŽ–îp¸Ýz]¯›Ï˺-VSÈí°c¾H' \<>6›Âè÷7 ‹hJ§©ävo–Ë¢¼©¦°Zu:X0SKV¶éííÕU.Ï™¢4ÕÜî͇ô–þÑ!Au?žž¨¥NµŠ×+†ÃlkÓ‘·Hr[”¦:Û=¶í÷¾‡§ýX­¸ƒzó†|®õz–‚{{ÛlGl áP0;r»'lÛþÖo‘€ Å÷~ ¡W³Y³yu•å…l­×Ũé\Œ”^Èí^ˆpj²mÏÎt¦( ¡WËe>Ö(‘#B4Õ19¥r»|©ò{¿ñ8 NèÅT^ÌfùÚžÃa½^œÐ0ó›ê@n÷@ض?ü!‰Çh¤{m:œð€ÁYAžÔlö…"|[-Ýóß H&¦ôBn_€ßº:jÕ÷QÅõ8D–³b½î÷uX™ºdþÌMé…ÜîD¼qËåù9:z³Bwùïñ¸ f"–È´kRÈíNxóÇÅý·N ½Y@mnL±.Çã›S½¸"×´”^Èíd9qÎŽ:?×=¢âB ½Õj§wÂiÜÞRž—îQ°·Ù4Íz”ˆ”^³šê@nwÀ¶-ýBú>.…Oåá–môû&¬¹G;™‰‰)½Û­Dˉ³ç e@ëµI²AHÑ7Aþ7Mu>|Ð= äv+\rQx „1}\]™Zî›ÊؘY3̼”^Èí„mk–ïÇîïáV8ºx7ÑWÊí(MíÞËMuÌIé…ÜnmÛ·ou¿öA~ðós,™Êxlbíry}mŽõ˜d63+r›Š°m͹±‰‡©»¸Ð=’¢`ŠeVLÌJé…ܦÂoÛ¶°Ã²…#pQ¦}?Æã¢”÷6Óí&šê˜‘Ò ¹MAI³mëûÕêå%¢²ƒÃêX·Ô×|ÁN¯¯MI¿Ø›9Mu ·)ˆ@¾Œã~[èá%XW­"%zÆcSc$”|q{kÞBÃë0&¤ôBn7¶-»×ŸžØƒK!KV«‹ ô3¶‡åÒÜå2“šê@n7ˆ—¿»ÃÂPÏrÙj™,aÅ””^Èíñrâ——¨Ôš/«®6™N›MS½¡ÛY.M1'äëNéý*·“I¯§û%‰ K“ÜÎf|á!ÞêBðê.|óbµ:?GnTÆTñJ‡R1êuýÒ4DJ¯ÞܯrÛë¹®î—$6,¾Ûão r òb±à…H…E?õ¦/%i=cÀÕ颉8|¿ÝžLt¿(_‡…/`)@PX’Û[ó#Ò1Ó®•ˆ”^}#ˆ8œz_Èmy`ï8:e0Ôó¶^/ªàšþ”^,•Í÷Ë‘òÙšZòe?ÆcÝÛ]v8äv£Q§ƒl²ü¡Nf°m%ËeqmÛÙ¬Õ"ë\÷8Òá”ÞnW×ë‘Û ¨Õ§V›Lù\ïËb†Üòe.¼Š@··&Vü:ꦦ§Gð~ÌfF,•…a¥âûÝn­†í¶î(3䖻Ǿ* –â6®¹R«ŸH ˜çÑ‚Y­F[®«7FÁ¹åRÕªîq”‹§§²^M¬×Ô±A÷(@ž|•[²k¥Üzä– ^^êG™àŽÇúß{=˜×ìx–KsÛ¢ëã«ÜÎçŽ3™°Üözކš‡¥ý+ÇëåXÂQ‰ˆÂ-S”‚™]NƒóËì›×©D–ÊHd]·Rñ¼JEwB¯ rKq ççÈ(S‰ +ÓÏœ->Û(T¥÷öÖm’X Ø|Þëù~¯§×²ý2,ír t°ZqZoµZ–ºõúö¶Õ²MšLÏ0ÓÃW¹ ß7%…r[fžž("¤\ï?Ä©D|·†ãT*¬[ —§§2¸ŠÐ¥áTúý›Ýc0‰DVÙdâû”ì@Aaš‡¹VCËIv .å—5›°Ü%1¹ ÃÁÀ÷=r{ßé ;™ Øœdr{k·õû&ç—é â»e™õýÁàpgB°+¢ÝÞýXÊX£øùàû• e³¥ K«Ü^\”-ÉL(0̾´)A6‹-Ø$"·Ç‹-e¡µÛó9Iv»½ë¸vÛóæóÁ€b|éÉ=/èQIqÕ+·«#¡‡ƒ^8ÑĶ 0ªøeBn ž˜3a2év м=Lì¨V.‹4 )ýÏ»ÝÍ%·0tœ  [í6É2‹nZãßo6'_Q]0g4¢/ùÙ™ÚgId®M?|“Je\tCÓéõuyf»IJ%k6ßý̉î"ï-]àrÂù\È3Ë-%L4”.Áâ* YÇQUÚ Ã41õýׯk_QtÁVëô³Xp™ »¢pÇãfs6Ó= Us-×Ë&TiQðúõO¿ýbò"™ë;Ÿ“]ÌéÀ´MQÑý\— ©¥¢8äñ%'FRrõ:ئÂR™ p®mÍ#˳€DIhà.ˆ4Ïi4ºÝS.ÛÉ*&‘¤&“l:w»l¿òVT~In}ßqÈ¥†F\–uË-­‡w:v}Á‹ E‰èCPáí²Ø´ Œº9Ðr&çSV*Ò|–Æ4‰¬pRÜ ?oÔÉ.åU<>RjyQ‰n|iÿr8×&ш®œK]=Š¢øÌdçJ‘…Ü‚2@~LsƒçÉzMIp*ĺ94tÑ?Ôj‡¥9 •Š\}£3ñâV»ÝhÄtÝn—ž‹#oyëÓ'óœ ÀD(R¡ØAaeµðnnêõV r›èæ 8¬›ya£-Ó)2ÁóÜg’¾à Gƒë²¼Ò`Ð)·«•Mkà6±XðfÑǫ̀KC9mZÉtŠHcâ«ÜÆ£„öXxylÛ)®ÛŽÓ'·‹ÅÝï#*Á<¨_/…+ —ÒÊêDq"Ye2J–±ôöâ…3lÂAa”€R¬¨\È-SÞ¥B"²TF.Š/ è[ts&Âù~Åë Wž8Û]L§­V³Yæ×"Ñ͡ۥæçz-Û/Â܂¨yd1’à³MBN•V«¬Ë…Ĺ¥:·”¦{8‘aAnA*wwE[ŠB€Ï6ÎpXæd^â³ÜЦÉZ‡¹‡òÈlkúNá³ÜV*ÿZ«í.Ÿ¨tX[ðOO¦Æ(ÿd™ý”ÛY.˺`öYn£¹^ºôuX[°“ѨZ53(ìööꪬ‚òËåím½~}­{zø"·br ŠˆÂ51(ìê =º¶1R‡¶²æ—AnAAAaæÅ)PL‚ÝMOáñQ÷ôñEnýÏPz­ÿíÂ܂¸»cÁ5¯@ãz ±›|–ÛZ Ú‡¹/B­#ÍñßÎfetÚŸõºŒU2ªw›Ã° ·`:sJ QÝ«ëkص/óøØjÕëå\È-Abêõ2û&÷¥ßo6ûýòý0AnÈ€íCY}Û[` ޾…2Zjàp ·À hÑŒ‚Ât<75ÅAà×1”­ì8äX Óó¹!Ÿ-¢…–ëõ2¹_ ·ÀؾÕ…‹Ê_‡s}}sS®ü2È-°†‹ \u¡ap!€ýÜk N½ÕªºÖ‘Ë%ÕF(ÓÅ08 È-°ˆÅBm†-’µZºg]lÖëò8b ·œÀx ëö(á¡<=/ ·ÀJV« î¯ýÚ¯üÊ)%Èx È-(1²højuqqZr^r J 72‰ ¾_­.ºÇ××vùo!· Ôàʦ[sè÷)»Ì®þp[PJd©¿ôp£§'8ô2›ÝÞÚ ¹%äñ‘rǶ§ŠR‚ïîä”õºÕª×onÒ÷®V\¾‚ ²r JÉlÖjm¯ý% 4Bpõ²\öûÒ·^t · Tì>/÷ìL÷ˆË 9}êõëkÝãÈ È-(´Ú½oÑp\X·z¡Æœ6å—AnA‰ ´†ý{==!BÔ½LV&.*[`´–½­üLVP»„†©ãúúæ¦ø é!·À:¸GC¾—ž—— ‡¹2{ ‡s„ÜÎçµZò¾^¯ö…^o×cðÝv×Gù~å™Mi…܂ÙÍdîQþ}dhbT±^;þö`¹ Õä½F­æf2ÙõèvÛóæóÁÀqè8ß÷¼àÏKŠ+äÎ!åg²€CÃîîtÏ», ‡ä$*²à(·¾ï<³)·µÚ`ݞϻÝ^/ ãG…¡ãÝj?óé‹î§O“IÒ&öýׯkµý,f˜å²ùŒÚç„e«Ž~¿Õ‹–ôÀ*óúõO¿=Йàû›rë8½žØ^Ïq Ï«TX\“‰óå¹×å­0œÏÓž£Ùœ|%í³™ø N§:C…F#„†$a(•¬Ù|÷³“å–¬V×­ÕX`çsaµ&ìvÅ6Im¯çyYËä`H>œ `?f³ÓÊÏdÅÕ#GhØÎKe›r;Ÿû>Ûµ-ƒ‘åJt»l¿òVô‘$·ä˜ —B’çwcX[°'¯ß£'"–7ÓiQ¢g"·–ÑJEz+¤ï‚öV*ò8Z0“[Â܂=¡ úó¦‚ÇGZ-jõÛLäV.u 'o‘]=.‡­`:‡YÈ-8œñ¸Õ2kÙd±@hXÞPDõí­þ×ã8Qn{=Z’K^k<†• Ëo»ÝhÄëºÝ.É0GÞò‡‘m r vBågòNÕ= ƒ;!?Öë¢:ˆåVÄà’¶Vs]Ï#ë•"<Ï}&¹äh e5±ÅÇÅ# ·`nnZ-ó¾|°lÁ62KâÏy9Œáå±´ãh×mÇAnÁ6†C‡ ë~™ÉjU­ú>ZJæA1­\ÔL…b¹¤B|úãöË‘“sKgY²\ÞÞšçHÚÈ-(ä³mµtbÎÎ^}¡Z…‹!;¦SúÉ…Üf9,È-ˆ!{'‘óþž%·Z…}›%Ãá±®„û{ ™[PȦ=­¹£.îï«UÄ*˜ÀÓGFëó¦CnA!X¯©üL—GhÉLÚ¶‹ÄW«•î¼?È-0˜éT†zõû··Eq"l‡—ÏÎÎÐbò4Öëáðêê%ÿíbqwUß§X}…„ ·À`hQÄ„ò3YA¡abùìì ËgÇC…‰šÍíŸÕêîNäøIçî <È-0éTرT~¦ø6­dµêt„äBnOáñq×çBô’#Ì)¹ÆAyñ¢ÉlVLí.8Õ÷âB÷8ìCZ¯÷÷,µççwwºmZ ä/‹ÙdÓn²XHxx¸¸€¥{OOä—½¼Û«ÕÙY§cŽÐ2[`³Ùõµ°iûýëkû¬Úm\\pÙFHî¡L§··õWŽL(1;¾r ?Ê#²‚ÅBz/.L³ÇL†>1õúŸü‰|ýªU³ÛAnf–Ká6 LøáP÷xÔ³X°}KÑ ºÇR V+–Õ~Ÿ*ßrÂååý½Ù¶-äh†B½„ a¹œNuGä¿}õ Ѹ/A‘´u ¥u42_hÈ-ÐL«eû²Ø¾D/„ïï/. ¾ID5¢ˆ¯äh`½¾½¨ NQ›¡ä»(û¬v›îîd’ˆ[Ê/+Jï2È-ÐU­-FE=<=E—ʱ0QÔÔZV&ÿìCnÁ \]¡jm±¡xr:ã ê¥e5B÷øÃdG¹BU½„ÄÎf[ör „"áBàp ·`/hYL„zÝÞ6›¦_¶²2__›j@nÁ^P„Û[¾-;Ž`’hn­È-؉¬{@¾ÂLçñÑÜO)äì€B½D`Íl†¶7œä¤ Ü´,fz•%Šäl@6­ðÓ‡··ðÔ‚b±\öû&¶k‚Ü‚ h¹¡öHƒ—Ëêuó¢g ·à ³ÙÍXd¸¹iµÌû°°77ý¾‰Ÿ_È-øBtYÌܵ]Š ä¶ä¬×á¸ÝjaY €ü€Ü–jv#êL§&^€p ëõxlZu0Èm)™Í¤Û…Á},—Í&-—™µà ¹-Âz%›VT@è÷M³8ÛÛáд5Èm B~Mï[ôkÏ·¨Dµ@n7 |«Õ—Ù6mÚ/å~Ìf××"ù–ªȪ^HÉ@-Û ¦S!I²²Ðp(…j<6¿¤öl&â f3iÇR''óÇ@v˜Ur»•åòæF¼UäëÖm½.Ò§SYÖ dš‚\$h6MLg oÖkjîdR;Èí^ŒÇÂÎ¥•|i-ÊÛú;ÑRc<1²Æ…³àñá] œ´ZfDÛ!/®ôJƒt>^_ \úš)!פr{Ó©X@‹{HÓQYœÍö”ÂJMAÄíVK:4dõ.jj£û5lr› ëµ¼d'¿©¸?Ýñ Å2ñ0Š[$¬Bš£‚-­fÙ‰äÖÔÎL˜ÀzmÊ•ä6„íš\lÞT)¡ÑˆyoT𝮢v¬ˆ7¸¹÷F…g½¦k>S²Ë ·Š˜Í¤õÚjEm^!–ш‡èœ\¤“gìGë™ár»{X–Ém:äý·e2-„€¬0雹%@n%À+r °œáJçë÷ßBn–C± &t߃Ü,çñÑŒúw[P䔹”*—ª»¦äPh¹ìêJo8äPò*†zÊí|^«½tL¶ÛŽãº½žxúÊ3›Ò ¹ØFfrµÚËrÛn{Þ|>8ÎdBOîyÁ3ž—WÈ-À62’[ßwž‘r;Ÿw»½^Æ CÇ ºÕ~æÓ'ÝOŸ&aíÊó5›“¯Ìçº_&@ñY¯‡CQaOa(•¬Ù|÷³Œœ ¾/ä¶×sœFÃó*WÁdâ|y®ÁÀuy+ ÓÄÔ÷_¿®}%)Æp8Ô(²ÙTëÃåë~æõëŸ~›±ÜÎçÂj•Ìt»b›¤¶×ó¼Fƒ¬br0$Ïg [†ÃñXgå„ —Ê„¸özd¹Ý.Û¯¼•_’[r@K! ¤×r °ä–¢ ¤ù,iÙJ…%¹¥3¹µ1,È-À*r±n=ï!»6zD8/ŸÑ±Rd!·ûÉAnðRáÅ­v»ÑˆãºÝ.Á‘·¼õéœ ûÉAn92ÁóÜg’K`A@Ž×å#i‹‹G0@nö‘S//mÛ#ÅuÛq[€m f(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-(r J€Ü€ · È-8’ ˜LÂP÷(Ê7öù|2™ÏuäA¯W©8Ÿi·Y¶œ>Eóy­V̱A£á8•Š8SÞA­æ8®KÿÁËGõ'ÅV ·%c±·:_yxH»÷þ^>®Ó‘·ÇévéÖ|îyüN"YµÚ~r»\Š¿ýþtÊ·Çã~óÞé´ßGË{³»ë¶Ûóyx^»ýÒ±d<–ç¨Õ –ÐvÛu_zÆZm29vf  ·%C ëÃë¯H1Þ{q!÷ꕼíºòÝ *ú+$+|¿×“»ƒïé[„ŸÜJ1­×…È^_×ë›÷öûõº8ZÞ›õØ'Çañ#iô¿s$ïßËs8ŽÐ0¤ÛA F+nÉQÒ@·Ë÷ÎçÝn¯Çc¥3ôz¾O{èè—­dÛ’qºÜÎ玳é;d¹i·+²UYÂÐ{¦Ñ ‹íäVßW%·ÙŽ}>ŸRUrKÏ·Ûhð-× â£ôýJÅóz=WÇi4<¯R!i¥Ûív­V©4tKJ8ÈÈmÉ8Ý™@6Ýæyù>!fµ½“ _ðN&$§ñ­(ûÊíé΄ìÇNH·Ä.²p&L&äw¦gc‰¤Ÿ²YÙNOŽ’ t ͯ³ã“tó˜÷;ÈÈ-8]’E„!}íéý Ç‘«ñ­(ûÊ­‰cg+Rå§u2¡×‹D—„–í×v›ìÙä(Yn{=×|¦Û¥™ ñž]þy*€Ü‚¡/uô‚¶VãKTºÍ°†ð¼rŸ¶%Q'·Yü£ê¤ÂPJiT*´äÇîv$GÉ#£yÕ¾¹Õ äL|¹‰Œ$‹.i£ä´f/Ž¡¥œèVô|êä6ë±ï‘qÛ\Œ“œìDHŽRX·žÇ Ûr«È-8Zzaÿy-y±†„ Ûå/v²¨u»®K¼aX©Ð¥lt+z>•r›åØI¢'_ÉìôìBÞÉNçç¤%0mKŽ’•¶xÆí6Ír«È-8 ßr]Ï£.™*@RE×|INGžçº´.V÷åVül*Ó²;± TŒ=(Å¡V£ÿ‹oydÙ.OŽ’gÂ?1´ÇuÙ–‡ÜêÂP¹ýñô#ÝcÐA¯ÇvˆùÐ…iZ2)Ûy´—÷Ѷ¼üŽoéšw¶c?…cæM ÈÑän7úc¥œ Ï8ßW5ïyÛÀ~ôãºrûÍ3ºÇ ƒ²Zõ˜÷qp$Eñ¤«¬ï÷7ßüà‡[c(ëÇó>Z;oÛ¼¥ËÈÎÏü¶yS©Vñ ˆ#ìÆ8¹-“û|û\mHØ=ïÉ„{×Ù*·Ûçm·Ün›w™®dåŒ ›h²j˜Í$çÚëÑ_ú­—Í7tQݼöþÐn›7ßÏ-VuQݼI†EÄB9 ±(·Éªa6“œ+‡@qȈ@÷ÕÍ[`¯Ün›7ÝÏ5ôì,ß´mÞÔï…î·uÞI ”ÛrU +Ó\1ïíóÞ^C϶Í;^I° '·`'[P䔹ڂɤE[ Ê&âè Qhò´8 *o—åøÒGYŒu×3›Á[4@¹Tm*kCœ"?\Þ.˦Fdûe‘`mg’6Øäh€2ÇÄm‘Ä).|¿×“yeƒïËžÍñ-F”·‹Þ†d‰özÝ®<Ÿ™íÓÍý"$‰j §†Ò«ùxqlôŒ|//ôD÷özœ)ÝK÷ósñ–}™t ä(g>wœMqak·)(¾Vã*°aèyTÊ„z[$·â$Ó#&:¶Vó¥„Q¹>¥n——Ø»ߊŸ1MnYÖÚmá»öÆJî§ç' çö”é£ÙôÝÆ»m#·¼eg£$r ´@Á[®ëyÀ%SHØ8^€.à)ÄŠJ’wSD&È­äù6å–b\WÄ ÄSÁ?ZšJÛO´ŸëΦ†Žá¿,•ñ3#·ôB·eõW`3[  .;¸ÆEùh/ï£m)Eñ­ím4M8Zð/mZRq|4rT›gà% ·ÀJ^jÉR––-À$ð‘V¹æ(áÿÛrÂø$µ%tEXtdate:create2018-10-06T17:29:14+02:00#%²N%tEXtdate:modify2018-10-06T17:29:14+02:00Rx ò0tEXtps:HiResBoundingBox500.418x398.43+21.552+18.492r¥|EtEXtps:LevelAdobe-3.0 EPSF-3.0 ›p»ãIEND®B`‚queueing/doc/qn_web_model.fig0000664000175000017500000000476312762046576016202 0ustar morenomoreno#FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 6 5130 4680 5850 5040 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5670 4860 180 180 5670 4860 5850 4860 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 5130 4680 5490 4680 5490 5040 5130 5040 -6 6 6390 4950 7110 5310 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 5130 180 180 6930 5130 7110 5130 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6390 4950 6750 4950 6750 5310 6390 5310 -6 6 6390 4410 7110 4770 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 4590 180 180 6930 4590 7110 4590 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6390 4410 6750 4410 6750 4770 6390 4770 -6 6 7740 4140 8460 4500 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 8280 4320 180 180 8280 4320 8460 4320 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 7740 4140 8100 4140 8100 4500 7740 4500 -6 6 7740 5220 8460 5580 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 8280 5400 180 180 8280 5400 8460 5400 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 7740 5220 8100 5220 8100 5580 7740 5580 -6 6 7740 4680 8460 5040 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 8280 4860 180 180 8280 4860 8460 4860 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 7740 4680 8100 4680 8100 5040 7740 5040 -6 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 6 0 0 1.00 60.00 120.00 8550 4770 9180 4770 9180 5940 4680 5940 4680 4770 5130 4770 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 5850 4770 6300 4770 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 7200 4770 7650 4770 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 6 0 0 1.00 60.00 120.00 8550 4950 9000 4950 9000 5760 4860 5760 4860 4950 5130 4950 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 7200 4950 7650 4950 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2 0 0 1.00 60.00 120.00 5850 4950 6300 4950 2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 7200 5670 6300 5670 6300 4050 7200 4050 7200 5670 2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 8550 5670 7650 5670 7650 4050 8550 4050 8550 5670 4 0 0 50 -1 0 12 0.0000 4 135 105 5625 4905 1\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6885 5175 3\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6885 4635 2\001 4 0 0 50 -1 0 10 0.0000 0 150 795 6300 3960 App. Servers\001 4 0 0 50 -1 0 12 0.0000 4 135 105 8235 5445 6\001 4 0 0 50 -1 0 12 0.0000 4 135 105 8235 4905 5\001 4 0 0 50 -1 0 12 0.0000 4 135 105 8235 4365 4\001 4 0 0 50 -1 0 10 0.0000 0 105 615 7785 3960 DB Server\001 4 0 0 50 -1 0 12 0.0000 4 135 585 5175 6120 Class 1\001 4 0 0 50 -1 0 12 0.0000 4 135 585 5175 5715 Class 2\001 4 0 0 50 -1 0 10 0.0000 0 105 705 5040 4590 Web Server\001 queueing/doc/summary.texi0000664000175000017500000001454713356152303015433 0ustar morenomoreno@c This file has been automatically generated from summary.txi @c by proc.m. Do not edit this file, all changes will be lost @c -*- texinfo -*- @c Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016 Moreno Marzolla @c @c This file is part of the queueing package. @c @c The queueing package is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public License @c as published by the Free Software Foundation; either version 3 of @c the License, or (at your option) any later version. @c @c The queueing package is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied warranty @c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with the queueing package; see the file COPYING. If not, see @c . @node Summary @chapter Summary @menu * About the Queueing Package:: What is the Queueing package. * Contributing Guidelines:: How to contribute. * Acknowledgments:: @end menu @node About the Queueing Package @section About the Queueing Package This document describes the @code{queueing} package for GNU Octave (@code{queueing} in short). The @code{queueing} package, previously known as @code{qnetworks} toolbox, is a collection of functions for analyzing queueing networks and Markov chains written for GNU Octave. Specifically, @code{queueing} contains functions for analyzing Jackson networks, open, closed or mixed product-form BCMP networks, and computing performance bounds. The following algorithms are available @itemize @item Convolution for closed, single-class product-form networks with load-dependent service centers; @item Exact and approximate Mean Value Analysis (MVA) for single and multiple class product-form closed networks; @item MVA for mixed, multiple class product-form networks with load-independent service centers; @item Approximate MVA for closed, single-class networks with blocking (MVABLO algorithm by F. Akyildiz); @item Asymptotic Bounds, Balanced System Bounds and Geometric Bounds; @end itemize @noindent @code{queueing} provides functions for analyzing the following types of single-station queueing systems: @itemize @item @math{M/M/1} @item @math{M/M/m} @item @math{M/M/\infty} @item @math{M/M/1/k} single-server, finite capacity system @item @math{M/M/m/k} multiple-server, finite capacity system @item Asymmetric @math{M/M/m} @item @math{M/G/1} (general service time distribution) @item @math{M/H_m/1} (Hyperexponential service time distribution) @end itemize Functions for Markov chain analysis are also provided (discrete- and continuous-time chains are supported): @itemize @item Birth-death processes; @item Transient and stationary state occupancy probabilities; @item Mean time to absorption; @item Expected sojourn times and time-averaged sojourn times; @item Mean first passage times; @end itemize The @code{queueing} package is distributed under the terms of the GNU General Public License (GPL), version 3 or later (@pxref{Copying}). You are encouraged to share this software with others, and improve this package by contributing additional functions and reporting bugs. @xref{Contributing Guidelines}. If you use the @code{queueing} package in a technical paper, please cite it as: @quotation Moreno Marzolla, @emph{The qnetworks Toolbox: A Software Package for Queueing Networks Analysis}. Khalid Al-Begain, Dieter Fiems and William J. Knottenbelt, Editors, Proceedings 17th International Conference on Analytical and Stochastic Modeling Techniques and Applications (ASMTA 2010) Cardiff, UK, June 14--16, 2010, volume 6148 of Lecture Notes in Computer Science, Springer, pp. 102--116, ISBN 978-3-642-13567-5 @end quotation If you use BibTeX, this is the citation block: @verbatim @inproceedings{queueing, author = {Moreno Marzolla}, title = {The qnetworks Toolbox: A Software Package for Queueing Networks Analysis}, booktitle = {Analytical and Stochastic Modeling Techniques and Applications, 17th International Conference, ASMTA 2010, Cardiff, UK, June 14-16, 2010. Proceedings}, editor = {Khalid Al-Begain and Dieter Fiems and William J. Knottenbelt}, year = {2010}, publisher = {Springer}, series = {Lecture Notes in Computer Science}, volume = {6148}, pages = {102--116}, ee = {http://dx.doi.org/10.1007/978-3-642-13568-2_8}, isbn = {978-3-642-13567-5} } @end verbatim An early draft of the paper above is available as Technical Report @uref{http://www.informatica.unibo.it/it/ricerca/technical-report/2010/UBLCS-2010-04, UBLCS-2010-04}, February 2010, Department of Computer Science, University of Bologna, Italy. @node Contributing Guidelines @section Contributing Guidelines Contributions and bug reports are @emph{always} welcome. If you want to contribute to the @code{queueing} package, here are some guidelines: @itemize @item If you are contributing a new function, please embed proper documentation within the function itself. The documentation must be in @code{texinfo} format, so that it can be extracted and included into the printable manual. See the existing functions for the documentation style. @item Make sure that each new function validates its input parameters. For example, a function accepting vectors should check whether the dimensions match. @item Provide bibliographic references for each new algorithm you contribute. Document any significant difference from the reference. Update the @file{doc/references.txi} file if appropriate. @item Include test and demo blocks. Test blocks are particularly important, since most algorithms are tricky to implement correctly. If appropriate, test blocks should also verify that the function fails on incorrect inputs. @end itemize Send your contribution to Moreno Marzolla (@email{moreno.marzolla@@unibo.it}). If you are a user of this package and find it useful, let me know by dropping me a line. Thanks. @node Acknowledgments @section Acknowledgments The following people (listed alphabetically) contributed to the @code{queueing} package, either by providing feedback, reporting bugs or contributing code: Philip Carinhas, Phil Colbourn, Diego Didona, Yves Durand, Marco Guazzone, Dmitry Kolesnikov, Michele Mazzucco, Marco Paolieri. queueing/doc/qn_open_single.pdf0000664000175000017500000001523513356152314016533 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ}VÉr1½ë+tƒPeE­]WÂrቩ|€ÙS8ðû<ͨ%13v¥*¶žzy¯Õ-ëIjER—¿úy:‹Ûû(¿þNE㌗ż/ïß ŠÙ+“¤ÓN‘òÜKZ+)RVd¥±Né$ƒmjë“ o©84 ç}ñàuÉàÀHNp0’øèf‡š¡.a_)ð>Sf÷•„“ø&š ÒÉ)ça9kåe™œ²Ñ·¼¼îÊšE%Þ"Ô5çèÒˆbR65id¼ƒKËÁë.®Y0oŽ°Ò±¨‹!*°’Ñ#¼uPÇHðQYeȤbÒ'R„Ur¼: ¯íl^gâlÍÞ¼æø'ÁHr~ŽWý³!8xŽÏË“àüŒ0¿ê¿°Èzš“rÂ?ç´üýY9£t„þà•ŸÏÑXä2 ™:B`eg„½®!†¢C®ì´É5Ôã ùKDt^r`ëÜ,æ,2¾Íü+gíq`c4cÄyvõ\äѸ^-Mè`†Ò0ÒKãŒUÚÁ¯"•Ô´ÉÕJ³.Ä™ 1øÖBtd,ÄÈþRÖÎl¿)f¥Ã*—ë°ƒÄêsɘÉàFB«L­ ;÷hÆÛ°V½CõR’Q5×°ÞçvÓT`j_ýîéqøºé鑸Úë‘:rõ†Þ^Ê>Œjú²Ï5¤–h˜U¦Í9 ×~=‡ÕîP½˜äúZ‡Úä$#®v§ËÑ;ÌŠØ©#Á*ÊH󺂔È) —Ì:×0†P¡Ó0†§²œ‹î²—“4"ûºµQŽ’LV« K+1‘:ù%ÞD;{)¿h·ˆ®Ó4#«ÈýtW35œ®3;DÛ«:lÉoil¨îÖáÄ6` YÙòt°*P,ñ9E&eB¸¬#¾ÓÄ~“H))Sxí˜X&}»•‡M{4ÚR¿Cn“dK䡾Ehù^?NgùòˆWfle-~oŽ_Äòú$ú lp¹G‹†<žÅsöæøCàqDISõ²òø©lù²¥e2Ê ê f v{|C†CÎ0Éò€_ Ox~Ûi±ü ÃŒG+fàPìîÞ,–K'ËY&´l½úþç'•ÍPÊ‘`ÿnÍÍ3$Õ*jŸ—øq 6[zJ;•æYæs[üXäadñæîÍÃ"wΕíèÕ÷E8Œ1ßÏ{¯8ÉâæX¨endstream endobj 6 0 obj 908 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 12 0 obj <> endobj 13 0 obj <> endobj 8 0 obj <> endobj 10 0 obj <> endobj 16 0 obj <> endobj 9 0 obj <> endobj 14 0 obj <>stream xœT{PSÙ¿—{O-‹ EÚÕnw]­ï2ë|ã PDÝ"bxI<À$œ$0!€ Kxƒ`%(hÅ-+Zew]V-Êúluggv[Kw§ßeéE;ÓþÝÿÎ9ßÌw¾ßë£)_Цi¿¸t¹Lµ8F)ORÌÜßãBhn¾*À†©ýSQBNâGa?öóm˜Ï: u.XfƒfåKÓ«wÆWÿjLü{‹}©Ì:•žš¦[¾lEرSaÿ©„EÉT驊°_ò­,S™%—)Ô»ÓåÇ4ª°×߆ÅÈR5™IÙÿûößnÿ_Š¢fGFmQíMÍØÿë•K—-§¨ÔBê]*ŽZFí VPÑÔ*êgÔ ‚HÁ˜o¤ï¨p³P&¼Áø0Áé?µÔÐÏýã"ÝH0Eqñ"h„ZƬÍ3æ`Ö;õå‡ê*ŽàµxM殸ͻdK1ñAä(ˆÉ|8 ÂWƒnJN}¼)j›| GãXÏÑž¸ßg¾Äà‹`û·€`áõkÚã%]µÊúÈ*{¹g^ú‡IŽZpfx@øÇs·>ýì†÷þ¿T<ŒÞú%¡»I(F¤)—™(®(²o@Ó{YÛ&£qƒA 7*ꬬèûóh^úÉÃý½+1¡0™ulõº#ûŒ+0J6º»¤þÜ'Ø7{ÁÝCÿmRÀ© Oz5[¡3¬µ"²²ûY§³ÝŽ`>?‡Õc8³µ0¥ðŽpº=—¹g©ÎwD¢éͬmUaÁz Ê…sõìz§¡Æv²mg Õë?'.l4z¸•MC·`íXPàÜ/D%*,`,E–R36ãBGA¹ºB]®Â("&>2¶+ùÙaéȉó9u*œ)NÌPÜ’Ö3©–ä‘ðÓŒ«²ÌQQàÁ*\mm2£Às[k‰'äá푱«ªs{º¥„UÖé›q›¸·³mðúÙËš$o7\„«^úÕ$äÍp<$º_ä6Ù7½RlZ_üH„ƒrÁ¶ÕZgkÅø“ÊKÍ7»ºÿˆ?Ç}†ž¬Žäþí‹yêØ%js¹Ú äÖ‘ïïM lŽÁîPKü¡{¸‘É€‡“«ž~É+ZXËl//vÏPl‰“,êÙ {µ£Ú^‰ÅÍî¼D)ѳ֦­¥(ðøN…‹²Ôj¥¢QÓ~¶±±£Cݨ˜‘ÎЭñp¤7ÝðÕs0ü=(ð.vjHËÎ×”u!…XW¦«@çjRR*N„$áDÝ EZæ©$Ó ¾{ï¿–Ü"sç—kq6ÚžðѦe»†Á?A¢fÎ’4a#]o¯®© ©Âu%õÅ|'}OoÑ…@™øáqÜ( ¾+ýÅõ¤~<Œ†û¼·úrSÏK:3jNžÙ˻ğ+å¡/ñП \ó ¿–É±'9U6¯¢Y#{Ê,N‹³T\Qè4c 2™ÌFI®µL¢3³>iˆ,†Ám0|ÛÎŒZŵ䨽`«*ÁùØdÊ7ä“PâÌ­aKÇ SŒ^,/æ±§ínžHô;wþaé´–µ(-*˜‰fÎÃG þÕ/à÷Ýû"¢ÏeXjs ø ±x«Y¦“gÞ™¹GáCÍY—Ou{ñm÷Xû½Êʯ]¨žtç²æÊBûFD>cÉÆGkáC ÿtþÎIsŸ{?@PÃ:~¬ªyäæM_jèæ¾¹_MÈîòÚÃbx"º›¬M¦ÛêžX¼­ŠÝ¹Q™ãjN‘(>Ö¹t©õmÚ%ÍØøDkïéåÞ–ü¾–7¨ìÔ6æV­çýpçr‹÷o?Ž^’¨ËH•È•úlížÚ’à‹÷ºncôyÿÑ©ú´ì“R9_Úªz=‡—»>A7&€íÜ×"8ÈÔa§ÝYÑó"ØäÒç˜Ì,&2†Ð¤ÐfÅ6l›Ë¬]Šóû$À¦\ÛßE‹ölˆÈÉs5Ê%Í·#¥Á˜-T?¹Û64$h¸ŽÇñÝÜÁCWûcšÈ¬äÎÐc ÀÜW"yvv†¢%»£³µùlçÉV¹tf²Ö©€Vºù;8ý\¼}ãpR^Jê¾Xa1ù ¿NÏt9Ö›8¤ÁCøR]÷ù‘á~%Â[’Âáç$HRzRôt€‰ŒÈÃV®Lü'‡ôðy.}mÁ©9ÒŸ `Ö<è¨e>ĺ*ÛÄ}Ï9ȶp!o©Úf—£·>C:ÀZ£u†õ¶Úð8×tŸ†ož 8%„ŠòËSö±‰IõâÛ ãø¡øÕºïÄÅk’S$éú ]Tƒ%øâ_ÏwaôìÓ˜Õ-]½\J¶}B#÷6ëo¨áTÂok˜žYO~Úãôó›(ó{‹¢þ W5Ž" endstream endobj 11 0 obj <> endobj 15 0 obj <>stream xœcd`ab`ddd®ÌMÊÏ1õ~H3þaú!ÃÜ]÷cÇÏ VYŸy³yÈò0tó0wó°Ìÿ~M軟àwoþï ,ŒŒ*æ)Y¡Aá Áùi%å‰E©: Îù•E™é% F†¦ I• @ùà’ļ”Ä¢ˆ]Å ÁuDèÏIÌMJId```º³‹‰‘‘¥ù{ßuæÿ¹-$œpíÇ9ÑIGV¬Ùѽ¦{iѬ¸IeS²¦¤þ®þÓ&ñ’í»Ý÷_«‡Îvš›")¼ a᪒Ògº×ïýÎÈQÆÖ^’—ÞÛ]8¯z]ÝÒ–%µ× ¾‹Jt÷võvMn]Ý5¡mañwæêC¥{+¶¦-KîöëÎŽhøÍÍÁ÷»¯[†Õ­›í0×cîsyxôñð20J‡d endstream endobj 17 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 18 0000000000 65535 f 0000001222 00000 n 0000006177 00000 n 0000001163 00000 n 0000001012 00000 n 0000000015 00000 n 0000000993 00000 n 0000001287 00000 n 0000001399 00000 n 0000001961 00000 n 0000001724 00000 n 0000004145 00000 n 0000001328 00000 n 0000001358 00000 n 0000002240 00000 n 0000004359 00000 n 0000001872 00000 n 0000004756 00000 n trailer << /Size 18 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 6300 %%EOF queueing/doc/qn_closed_single.pdf0000664000175000017500000001303413356152314017036 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ}VÉr! ½óܲTYA ¶kœ8—lϤò“ÄYfReûß àž¥\åHzzR‹~ÔP›òמ»ƒzwõó"ˆ–¬×ÿTÝ×÷Ÿz—À&m³ôA:‚9ƒu)X@~Z&.ð6öõN¡T äæT-šƒ¶”lЗ"X-(¸jÐ"´%Ÿod¿ìæ«vê§Úô4rt@”§ÄRÌà§Ì’qà¢ïqe=2ë'ñî¡­%ÆH MˆàRO ‘› õÚz$×Oˆüâa•Ç’·¸Á!'×ï"Pb))Ï’!8ÒÎsŒ$«²ž}z“­§ÅZÖâžY6$Z_ Ä>¬Í¿,wJâ Òè5óû%¥ÇÚ”-ÿsÎè§ï*%&’ΞÀ{Ïiæd€K.À¾Ù²ãÄ@·¹€ä` „.éþ(О}}«ÿ*Så0…Aà®Ë86æmŽ“»YÖˆ²Qw§²9Ë£S½¨Km®`‡.t]Z05!±¹„4>ò"íu]Ö*º ÃXTȬÂÄý\ÔAì¤ ™ÝçÄ€L]Ì Éwd?Ò ¹ÖF¬. dîÚQãu¬.F“À…y~6:('#ë×Ëá##yFŠL'’;Oª?©~ÝØÅPci멪 ‚‹Íe$3sš ·Ž4T:¾eVº-YŸ z6ÈÜÒjí†8ô9Ü€ýÌí’í9áG†ñp$Èð$—Âð4‹uï“}Lúëßm."‹DcŒ¬#Õaº[^ŽªTÏ™fÕòYñôÀéãò»=vý~ËŸ!å&çx2m¨åó5ËJµ9÷cÔÛƒzm ¾Ùþf‡|ñXÃÇ¿ÌìŠøñ6ê«à¹ï™Lټݔ½¸ÄÍA`I•›ë›ºÇ7¯á6ÒÛÏ {¥®Ê'ŠÉ4G¹¾ýR=µÅ“¯[~=ÿÁ²YÙꀉŸ—´âB¥AÃê½`b«­c»[VùNýmç$endstream endobj 6 0 obj 765 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœT}TSç¿—$÷Þ9•4B $¬ÕuýPÁ©¨ãê'*Q;@ ! ’ $È›D@ ßß… ¨«v(uŠÕRa Óª[íñœvs¬={nÎeçìRwÎö÷þ{ß÷9çyŸß׃c\/ ÇqïX¹B¦^£R$)—îïÐþ8àErÁsÄΣÅÞòæ onsî+Á¼²W`\ÝW÷«#1qï¼÷ÞûªÌ¼,yjš&hCpÈÆ SyAÿ©EÊÔòTeÐ/ÙƒV–¡ÊTÈ”šƒrÅ©luÐOßÅÈR³3’²þ÷í¿Ýþ¿þ†-ˆÜ¥Ž–KÓü:t]pÈ [­ÁÞÆb±l¶‹Â6c¯c~Ørl%æƒ °,ÓbÏñƒø¯=^ÍœÎ47‚;Åž//—7B,;ß³Þ0FÿcïŠãÁè8¡ ²yZ¢T›oÌA&¤·ë+7ÆWŸD[Ñ–Œ±­GŒÅ$‚ˆ €À{yéÑMqÞÇ;#÷(¶ Q’º‡b—ñ—‚½/€‚57®iO‹ûÒª¦}ß“‚ÜôS7þÃMÎiXn(ôcÿ­ëw>wƒ¾GÏ•sÒ‰Ý_2ø ˆ(¦5—˜/©.¶n§£IËN£q»™‚zJØ[S=úç©|ùñÜ‘‘MˆÁ³ìTè¶“Ç”‡•ltôIøôgÈ7GÀ1„ÿmC«!_z Y¦3l­ ˜5EX{ìö.+ì.Cê(‡·x‹]¹ÄŒ¹®ÀA-~HZ6†›©\èo"Ãí†zË JXC>¶4ê¶Q|ZTÔbtÑ›Z}®Þ‚­Ó¾‚q¸w…eÈ+$ÌÅæòRTŠŠl…•šjM¥Qa1qÒ¾ä§'$“grÕ(C”®:¶+mhA#Îg‚ÏU5çluˆ«Eu­¥”`¼´³£Ìå?w{rúSuÿ¡A ƒM©õm¨S4ÒÛyéFÏ™Vñ+ÄÍÃð©¹ùK{|…³Å“uç+ %¦ð’W@Âl,Y ö‘–4>«¹Øv³oðè 4jÊìNÛØµ–U¡‘€ƒ‘ÂΪªNð¿urõ»Ññ ™c°Ú4b>ô"=¹à3·°ù‰¯àKVÑ"'±·²Ä±Devf},OOV[ëluÖ$jsä'H=Y±ÃT´»œ<®'X˜©Ñ¨”-Ù]=--ÝÝšå’t†ÁlÍŒÈ]>_=Ãß}ïÓRÏ¡–d—uþEHwNWM úëSRªÏø'¡ÝeZF^ŠC¿“7úþékÉí2GA¥eQ{ã?Úr`øñb ÑäñZAT“µ®Þé_‹ËšJØNú¡‘â þ@ýeþ‡Ç±SŒß}É›7’ÆÐ51ê¾5>š›: îM¯?Ûͺ„O—³Ð×¹ðÇO8U« ÀIäX“ìÆZ‹[Q$1‡Î™íf{¹¨ºÈ^ŠÌ”ÉTjçêAé$ìMIW™µpÔ¯»V·³aªBäd äKm*@&S¡€ dø~ô²ÌvÚ¨4ÅèEŠb^>yÞê`‰¤>qœ,jIËÑòòÈÂ¥h±a¦]l´à_cvß½+dô¹ÄC³3Ƕš ‰v—ÊtŠÌû3¶£Ht¼-ór^_‰ݦ`†´ÎÔÔü©ŠjbsÉùÒš"ëйC2;m…ÿãÀ½ â¶QÇ%ô‚zÒöcmý#kúrà ýíMøj^vŸÕÖÂ×ÂÏQkE«é¶fHŠvQ›¥ûw¨rªÚRÄÊuU:DiômÚÅìéó#W$—GÚ'Ñ]t-ÿ’ªWÛ’[—ØÄúáÞåv÷ïßx5±.>A—ž*V¨ôYÚCÎ2¿áÙñ¾Ûˆúb,qª>-ë¬DÁ–v«—æ(vÑ3³8½„y‘ ¢™·‹Gî6¿n‚`Ž/¾àÝ! Íó&öBààÓÀáÀÊ—BEVVº²=«»·£­§÷l‡B²„©ÃãÓ·}ç¿ã@k¸X””Ÿ’zX*cHÄüŒ]€ý uYêN¸ªžDWÑÅÆÁɉ!v‰Ák$Ã/_qùYá“q†ÇÈYBЦM ÿ„Ó ¯g’ŸLãYáÂAþŒËVA·“øéj-W(ú{²ØÆì æ±&p¶U9ÕìЧKãÉŠ(!ܲ= [gqøö‡VA ° 2åpaÉI‹ˆ)& "¿yqáš½Üöð­Ø¸ìäqº\Ÿ®‹l6û ÿu oQO¯Ç„†}´>tƒ„ÙÅæé7H¾¡ž>Z¿­'†–}ýó!»·÷ü9ï×0ìß}]e¾ endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001079 00000 n 0000005104 00000 n 0000001020 00000 n 0000000869 00000 n 0000000015 00000 n 0000000850 00000 n 0000001144 00000 n 0000001245 00000 n 0000001570 00000 n 0000001185 00000 n 0000001215 00000 n 0000001850 00000 n 0000003683 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<1C43C461EEC0D06BFF1A616E35968DEF><1C43C461EEC0D06BFF1A616E35968DEF>] >> startxref 5227 %%EOF queueing/doc/installation.texi0000664000175000017500000003740513356152303016435 0ustar morenomoreno@c This file has been automatically generated from installation.txi @c by proc.m. Do not edit this file, all changes will be lost @c -*- texinfo -*- @c Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2018 Moreno Marzolla @c @c This file is part of the queueing package. @c @c The queueing package is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public License @c as published by the Free Software Foundation; either version 3 of @c the License, or (at your option) any later version. @c @c The queueing package is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied warranty @c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with the queueing package; see the file COPYING. If not, see @c . @ifset INSTALLONLY @include conf.texi This file documents the installation procedure of the Octave @code{queueing} package. @code{queueing} is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3 or later, as published by the Free Software Foundation. @quotation Note This file (@file{INSTALL}) is automatically generated from @file{doc/installation.txi} in the @code{queueing} source tree. Do not modify this document directly, as changes will be lost. Modify @file{doc/installation.txi} instead. @end quotation @end ifset @node Installation and Getting Started @chapter Installation and Getting Started @menu * Installation through Octave package management system:: * Manual installation:: * Development sources:: * Naming Conventions:: * Quick start Guide:: @end menu @c @c @c @node Installation through Octave package management system @section Installation through Octave package management system The most recent version of @code{queueing} is @value{VERSION} and can be downloaded from Octave-Forge @url{https://octave.sourceforge.io/queueing/} Additional information can be found at @url{http://www.moreno.marzolla.name/software/queueing/} To install @code{queueing}, follow these steps: @enumerate @item If you have a recent version of GNU Octave and a network connection, you can install @code{queueing} from Octave command prompt using this command: @example octave:1> @kbd{pkg install -forge queueing} @end example The command above will download and install the latest version of the @code{queueing} package from Octave Forge, and install it on your machine. If you do not have root access, you can perform a local install with: @example octave:1> @kbd{pkg install -local -forge queueing} @end example This will install @code{queueing} in your home directory, and the package will be available to the current user only. @item Alternatively, you can first download the @code{queueing} tarball from Octave-Forge; to install the package in the system-wide location issue this command at the Octave prompt: @example octave:1> @kbd{pkg install @emph{queueing-@value{VERSION}.tar.gz}} @end example @noindent (you may need to start Octave as root in order to allow the installation to copy the files to the target locations). After this, all functions will be available each time Octave starts, without the need to tweak the search path. If you do not have root access, you can do a local install using: @example octave:1> @kbd{pkg install -local queueing-@value{VERSION}.tar.gz} @end example @item Use the @kbd{pkg list} command at the Octave prompt to check that the @code{queueing} package has been succesfully installed; you should see something like: @example octave:1>@kbd{pkg list queueing} Package Name | Version | Installation directory --------------+---------+----------------------- queueing | @value{VERSION} | /home/moreno/octave/queueing-@value{VERSION} @end example @item Starting from version 1.1.1, @code{queueing} is no longer automatically loaded on Octave start. To make the functions available for use, you need to issue the command @example octave:1>@kbd{pkg load queueing} @end example @noindent at the Octave prompt. To automatically load @code{queueing} each time Octave starts, you can add the command above to the startup script (usually, @file{~/.octaverc} on Unix systems). @item To completely remove @code{queueing} from your system, use the @kbd{pkg uninstall} command: @example octave:1> @kbd{pkg uninstall queueing} @end example @end enumerate @c @c @c @node Manual installation @section Manual installation If you want to manually install @code{queueing} in a custom location, you can download the tarball and unpack it somewhere: @example @kbd{tar xvfz queueing-@value{VERSION}.tar.gz} @kbd{cd queueing-@value{VERSION}/queueing/} @end example Copy all @code{.m} files from the @file{inst/} directory to some target location. Then, start Octave with the @option{-p} option to add the target location to the search path, so that Octave will find all @code{queueing} functions automatically: @example @kbd{octave -p @emph{/path/to/queueing}} @end example For example, if all @code{queueing} m-files are in @file{/usr/local/queueing}, you can start Octave as follows: @example @kbd{octave -p @emph{/usr/local/queueing}} @end example If you want, you can add the following line to @file{~/.octaverc}: @example @kbd{addpath("@emph{/path/to/queueing}");} @end example @noindent so that the path @file{/path/to/queueing} is automatically added to the search path each time Octave is started, and you no longer need to specify the @option{-p} option on the command line. @c @c The following will not appear in the INSTALL text file @c @ifclear INSTALLONLY @node Development sources @section Development sources The source code of the @code{queueing} package can be found in the Mercurial repository at the URL: @url{https://sourceforge.net/p/octave/queueing/ci/default/tree/} The source distribution contains additional development files that are not present in the installation tarball. This section briefly describes the content of the source tree. This is only relevant for developers who want to modify the code or the documentation. The source distribution contains the following directories: @table @file @item doc/ Documentation sources. Most of the documentation is extracted from the comment blocks of function files from the @file{inst/} directory. @item inst/ This directory contains the @verb{|m|}-files which implement the various algorithms provided by @code{queueing}. As a notational convention, the names of functions for Queueing Networks begin with the @samp{qn} prefix; the name of functions for Continuous-Time Markov Chains (CTMCs) begin with the @samp{ctmc} prefix, and the names of functions for Discrete-Time Markov Chains (DTMCs) begin with the @samp{dtmc} prefix. @item test/ This directory contains the test scripts used to run all function tests. @item devel/ This directory contains functions that are either not working properly, or need additional testing before they are moved to the @file{inst/} directory. @end table The @code{queueing} package ships with a Makefile which can be used to produce the documentation (in PDF and HTML format), and automatically execute all function tests. The following targets are defined: @table @code @item all Running @samp{make} (or @samp{make all}) on the top-level directory builds the programs used to extract the documentation from the comments embedded in the @verb{|m|}-files, and then produce the documentation in PDF and HTML format (@file{doc/queueing.pdf} and @file{doc/queueing.html}, respectively). @item check Running @samp{make check} will execute all tests contained in the @verb{|m|}-files. If you modify the code of any function in the @file{inst/} directory, you should run the tests to ensure that no errors have been introduced. You are also encouraged to contribute new tests, especially for functions that are not adequately validated. @item clean @itemx distclean @itemx dist The @samp{make clean}, @samp{make distclean} and @samp{make dist} commands are used to clean up the source directory and prepare the distribution archive in compressed tar format. @end table @node Naming Conventions @section Naming Conventions Most of the functions in the @code{queueing} package obey a common naming convention. Function names are made of several parts; the first part is a prefix which indicates the class of problems the function addresses: @table @asis @item @strong{ctmc-} Functions for continuous-time Markov chains @item @strong{dtmc-} Functions for discrete-time Markov chains @item @strong{qs-} Functions for analyzing single-station queueing systems (individual service centers) @item @strong{qn-} Functions for analyzing queueing networks @end table Functions dealing with Markov chains start with either the @code{ctmc} or @code{dtmc} prefix; the prefix is optionally followed by an additional string which hints at what the function does: @table @asis @item @strong{-bd} Birth-Death process @item @strong{-mtta} Mean Time to Absorption @item @strong{-fpt} First Passage Times @item @strong{-exps} Expected Sojourn Times @item @strong{-taexps} Time-Averaged Expected Sojourn Times @end table For example, function @code{ctmcbd} returns the infinitesimal generator matrix for a continuous birth-death process, while @code{dtmcbd} returns the transition probability matrix for a discrete birth-death process. Note that there exist functions @code{ctmc} and @code{dtmc} (without any suffix) that compute steady-state and transient state occupancy probabilities for CTMCs and DTMCs, respectively. @xref{Markov Chains}. Functions whose name starts with @code{qs-} deal with single station queueing systems. The suffix describes the type of system, e.g., @code{qsmm1} for @math{M/M/1}, @code{qnmmm} for @math{M/M/m} and so on. @xref{Single Station Queueing Systems}. Finally, functions whose name starts with @code{qn-} deal with queueing networks. The character that follows indicates whether the function handles open (@code{'o'}) or closed (@code{'c'}) networks, and whether there is a single customer class (@code{'s'}) or multiple classes (@code{'m'}). The string @code{mix} indicates that the function supports mixed networks with both open and closed customer classes. @table @asis @item @strong{-os-} Open, single-class network: open network with a single class of customers @item @strong{-om-} Open, multiclass network: open network with multiple job classes @item @strong{-cs-} Closed, single-class network @item @strong{-cm-} Closed, multiclass network @item @strong{-mix-} Mixed network with open and closed classes of customers @end table The last part of the function name indicates the algorithm implemented by the function. @xref{Queueing Networks}. @table @asis @item @strong{-aba} Asymptotic Bounds Analysis @item @strong{-bsb} Balanced System Bounds @item @strong{-gb} Geometric Bounds @item @strong{-pb} PB Bounds @item @strong{-cb} Composite Bounds (CB) @item @strong{-mva} Mean Value Analysis (MVA) algorithm @item @strong{-cmva} Conditional MVA @item @strong{-mvald} MVA with general load-dependent servers @item @strong{-mvaap} Approximate MVA @item @strong{-mvablo} MVABLO approximation for blocking queueing networks @item @strong{-conv} Convolution algorithm @item @strong{-convld} Convolution algorithm with general load-dependent servers @end table @cindex deprecated functions The current version (@value{VERSION}) of the @code{queueing} package still supports the naming convention used in old releases of @code{queueing}. These old functions are no longer documented and will be removed in future releases. Calling one of the deprecate functions results in a warning message being displayed; the message appears only one time per session: @example @group octave:1> @kbd{qnclosedab(10,[1 2 3])} @print{} warning: qnclosedab is deprecated. Please use qncsaba instead @result{} ans = 0.16667 @end group @end example Therefore, your legacy code should run with the current version of the @code{queueing} package. You can turn off all warnings with the command: @example @group octave:1> @kbd{warning ("off", "qn:deprecated-function");} @end group @end example However, it is recommended to update your code to the new API and not ignore the warnings above. To help catching usages of deprecated functions, you can transform warnings into errors so that your application stops immediately: @example @group octave:1> @kbd{warning ("error", "qn:deprecated-function");} @end group @end example @node Quick start Guide @section Quick start Guide You can use all functions by simply invoking their name with the appropriate parameters; an error is shown in case of missing/wrong parameters. Extensive documentation is provided for each function, and can be displayed with the @command{help} command. For example: @example octave:2> @kbd{help qncsmvablo} @end example @noindent shows the documentation for the @command{qncsmvablo} function. Additional information can be found in the @code{queueing} manual, that is available in PDF format in @file{doc/queueing.pdf} and in HTML format in @file{doc/queueing.html}. Many functions have demo blocks showing usage examples. To execute the demos for the @command{qnclosed} function, use the @command{demo} command: @example octave:4> @kbd{demo qnclosed} @end example We now illustrate a few examples of how the @code{queueing} package can be used. More examples are provided in the manual. @noindent @strong{Example 1} Compute the stationary state occupancy probabilities of a continuous-time Markov chain with infinitesimal generator matrix @iftex @tex $$ {\bf Q} = \pmatrix{ -0.8 & 0.6 & 9,2 \cr 0.3 & -0.7 & 0.4 \cr 0.2 & 0.2 & -0.4 } $$ @end tex @end iftex @ifnottex @example @group / -0.8 0.6 0.2 \ Q = | 0.3 -0.7 0.4 | \ 0.2 0.2 -0.4 / @end group @end example @end ifnottex @example @group Q = [ -0.8 0.6 0.2; \ 0.3 -0.7 0.4; \ 0.2 0.2 -0.4 ]; q = ctmc(Q) @result{} q = 0.23256 0.32558 0.44186 @end group @end example @noindent @strong{Example 2} Compute the transient state occupancy probability after @math{n=3} transitions of a three state discrete-time birth-death process, with birth probabilities @math{\lambda_{01} = 0.3} and @math{\lambda_{12} = 0.5} and death probabilities @math{\mu_{10} = 0.5} and @math{\mu_{21} = 0.7}, assuming that the system is initially in state zero (i.e., the initial state occupancy probabilities are @math{[1, 0, 0]}). @example @group n = 3; p0 = [1 0 0]; P = dtmcbd( [0.3 0.5], [0.5 0.7] ); p = dtmc(P,n,p0) @result{} p = 0.55300 0.29700 0.15000 @end group @end example @noindent @strong{Example 3} Compute server utilization, response time, mean number of requests and throughput of a closed queueing network with @math{N=4} requests and three @math{M/M/1}--FCFS queues with mean service times @math{{\bf S} = [1.0, 0.8, 1.4]} and average number of visits @math{{\bf V} = [1.0, 0.8, 0.8]} @example @group S = [1.0 0.8 1.4]; V = [1.0 0.8 0.8]; N = 4; [U R Q X] = qncsmva(N, S, V) @result{} U = 0.70064 0.44841 0.78471 R = 2.1030 1.2642 3.2433 Q = 1.47346 0.70862 1.81792 X = 0.70064 0.56051 0.56051 @end group @end example @noindent @strong{Example 4} Compute server utilization, response time, mean number of requests and throughput of an open queueing network with three @math{M/M/1}--FCFS queues with mean service times @math{{\bf S} = [1.0, 0.8, 1.4]} and average number of visits @math{{\bf V} = [1.0, 0.8, 0.8]}. The overall arrival rate is @math{\lambda = 0.8} requests/second. @example @group S = [1.0 0.8 1.4]; V = [1.0 0.8 0.8]; lambda = 0.8; [U R Q X] = qnos(lambda, S, V) @result{} U = 0.80000 0.51200 0.89600 R = 5.0000 1.6393 13.4615 Q = 4.0000 1.0492 8.6154 X = 0.80000 0.64000 0.64000 @end group @end example @c @c @c @end ifclear queueing/doc/web.pdf0000664000175000017500000001626213356152314014311 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ½XËrG¼ÏWÌjwõ»¯v8áhoÄáE‚~ü½³úY³»´S“ÓUÝ•³ŸV­hÕüÓþ¾Þ/?=ë»ÃB+ÿ|~·8›TÒ´ëÒ~Ý/.k£Ò®Gˆ9)ÇÈÛã q׌9{WXöŠrkÀ¼¢Í*lžu|Ó9sÏ‹•¯ø%þ¿Yüú×RtXŸÿö_žÌþÌ/Ï1,úòR}ÉXD%{ߤâ­ ©D‘µ&Õ&Sƒ&Ñ&1Æ)'x0y4y0y,QTFð `ò4hò `ò8MZ T‡B„4u(î¿'ŽmjD®&O-$lO ÕÏíÏëýúó,1°{»Ô=G«#l?c´²yÝí—OôÓ‹˜½Ç,žhe0ð6ª1pe”& ‚¤rS9<¡§/w¿/¿î–gGe~¦Š’UOdH>)2gËßD¦“L L"¦1É ^¡:eS¤ì"¦2m‚:“ƒZV25@2‰˜Æ$ƒN÷Qc:ݶ2¦1‰ ‡–€µÊ’ç=ˆCc”ª`÷ÇrA\yµA‘ÎiݽÁ¥µç‹^yŸc,I›~‘Ê÷]<¹SоÆó¹à‰E•P_y5É ï¡Lj÷þóÍ—wïo¿Üqh«1½:ñ¯W›Ñ|ªòÃIÇõôŽÚ”ê‘mB„¾|Ìhâ&¢BR®’Õ^Yœ*™´ŠÄˆGõ8nÉ©Ph|-Är“ ly…¨ìªëÅó*˜Šp @5ÈðÁ«£WÉ cº™XÂt3?˜óàtà= *žš j¡Z§|A’ÂöaÄi¤Áð“³Qļθ ¬]-áÔ5%ÆùÀç&–ŠcK‹e·¥°N÷àôÈ.³ž~ê[Þ ù1·¬¢òcþ\íS}¬SŒõ!BpÇòÿòû|¬¿Ûȯ±ã‚ÐßälYÒ™,;0ÝL€I)(ŸDLÄ]Z&À„”p¤Îs]g «Œ h—×ÓRe§JIªìرlTö£ì»ÌÉVÊöʦÊC,ƒ9„X™‡ÎéBO¤+=‘®4#ÚH©îN$K=@»©õ`p”ÊRçe+KÝ£°)ËRw¡Ü®Ö݇ýÕcºàÀ¢:ÛoÊ$BȘQÉ]wÕz#Bq1!‡"6S±ÊÝ!äÀÍ›„C nÍAZ1"ä¨xîÈ­m»;Ì‹êkSwd#ŒzœK•§;ÂÆ¯Ö«[bCP|U·äѨœUƒ2ÌÓ" üô£»a¨!}EY¡™´×Tß+z(_•éY îåFf§Áˆ,…1ŠVf2V4²Àï„¥a,3[GLÇ —Y(ŠKìYÈp瑤OKÓ”9÷,$íÖHKœŒm1= ç¶%a‰ÌwŽö,1ñ7+”¥Ô;.Ë÷>,ß³?”f—6JSÒµ‡Ò¥Æ0ÖÂ2Odû@†Ìé23’å‹?HE)3&ƒ•lŠÝ`%›W¿²¦R£ØñêQßNF±[÷õ‹ÒVì4!þ!Æ»'ÞˆÂ5Äï§L3 qG×Ïç4C|ü˜7Ä“ºbÉý`]1O~Jœ4ôÅÈúêã›õsowh럇3M¦HûlùØg­¦endstream endobj 6 0 obj 1625 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœUiP×îf˜îAŒÓi@fæZDEQ–¨€,²/@0왉—(Æ… úbb@4²‰¸DA#JŠ5$ŠaD@yŽ„D£y9=uÇz¯“J½¿¯ª««owßs¿ï;ç|‡$ ’$üS³ Ró3“õ+[Þ‚ä- xKÂJí>m¡˜Û˜@Æ"dlXkiT&ogÁ¶™ð!"ÉÅ+vØDG¬™oggïS˜›™ž‘/wr\è"O*”ÿùE—™®”Ï R³²s©ÊüLEÒÆW˜ã†çøøý¨“SÑÊžš/ËþÙ í§·íù¸¤1éÛ6ÉMgùnŒžŸ¤gö,»gÊnâ fóÕn¸f[䑾.‰_ß’ò´›Î†vé‰üMÊú ¢Öã­·™zŠÓâpn6ÄóÕâw(l£óÄrÞSx„ ]µxúÞqlVCňˆ?ÝÊíØ»íBŒò£ÊzÜ 5~m˜ó Ù˜’.ÍËٮػ†¥|î„ 1?]ÈŽ‘m¤KÒ ·úíÀF› w¯ß²!+ù1ö½¡ÿîí¨½Ú%ý4º>ÿ*ú}QÖp€ÁóÀCÙÅE¹ù™YIÅ"&0õTǵƆ‰ Ù£ò#û*˜¿A·@>ð©¶G` Dˆí)ðÆq0®OR`ñ`ŠãÅS”° +‡µoV‘¼™ 0ž«³Çoñöb' |uµëݶ¤nÉ@æ[ж²ÂýÌ2úÈŽ#»kÐqtâóšÃõG+k7í‰Ùt­FUñÁ*ðª’Ô«¡]èËV¾X«àÜp•ÑÙà+”‡¥&±;öÃ$XÝi;ÞÓ"c7¯ qŸÈM\÷ÀûžîîìòLÀäÆƒI§[üûÀeäÂV }reóùÌ1÷öùBÌyï`^Ž—OX ôU-[Lå¯\›îV£„ºìKžÜy²¤)ëãLuÝEÌî€wdBX¬ì‡YúZZì¬Îš²–¼ û4;u+1¾!À³ÎØ{8W¯jY-;ß–{ÝB- —z™ËSÖXû¤5tKQŸÙ†…Ñ÷ÇÎ4ÝZÙƒ`&#„ ¤Ù,œÌ·-Çæ˜}o¹‹kÌ=ààͶŸÆd¹™ Ù?"˜™¨_Pì¥bD°2½‘5Ôo®’ÖÌEiÌ+Cº6wyBþªX)œ¤#BUpyö“ o8%‚øƒÔHSòBYI Jøl]…ÂĵTFÝÎú½S%`¼©ÑãÌð…¯ZÑ(ÏÛxŽ?z©ÐP¼ÜöÃFº,®ýðXAÅè}Æe]ŠÐ‡¹Ó¥õôwI福Y Ø *¹éªG(ö™Va¸Øj”2Ñ:¦øLEökxR#â5|9‡ÚöúèLòè¢Kx¦*›%ØÌéräϹ2ˆÓä]HCæ(¥ 9k£² ~{rG«f4çœÞv¶´E°‰RÿŠu'’ÛVŽf€©ÑU—[ÏŸê20Ùks¯j5s®[߀:™žÖ_€éYcW*”  *-=LÂ!þÐZpP<¬»½v¾´ÐPÓT´¾Udߨ챿Tè±üÏTÉÑ_¦ìÙ¿Ë0ÍþðÓµ}7ϦúKñKý ýòFcJ€~É¿M?‰nŸï›X+ÍêL¬óC ëè‹ÖnXÄ ÐÓY&¡|\å‚(ºòqmz8…EnÆ–…Ì*ý¥c|§PÞK&Dü>5§{ú¼ûô9uÇÓN³_¯};€¡î¼ÎÄó‰çÖ|é"ÁãsS?NØ+Œ4j_ë§'Êëj/}s¼1CÝážáĥˢ±Í¢÷ýб“9ŸEMc‡û$ 0†À›ÃÞãàýû}+>3Æ÷tqâ4´ßçp.¹pgÚàT VƒšäÝX9ÚNg@­ÖÍ? .´ž9Ò‰˜É®@«¹aÁv^kÏÈœ©òðƒÙվ޾“5$x»õÓ` ò?c˘䭊$YÄŠá õ*t¯ âTäÅI8'ßÅŸæŠÀèÝ~L O䛚˜à³ÉaS„MŽx]\u.ìf–`œ`1õ þæ Ÿ`Ö7jÃêTY)øuþú ÝD“ù2œsçv„Ú9†,]|ûñD÷Mµ0ëN½:òü©$MP"ÜLÙ)Þ‚ŸÅ ´Ô6¢>(—û‚_ÎröÀ╵wã¥ìó¥IÉaîoa³)áXù/Ál(¹kÉ);…8ÂÝ»’àí›°|Y\Kÿ•–{2ö9¾n8Þ¾Ø%,ÂÑ5´kt¬ëº~ØžB/Hõ D¾à¬­_P¯¦Çcþ4Mˆ A›Î PEZlüª|;„ßbðž!Ì=Ø ^±äŸ¬í•¦µ…ðGŒ§áäe[üNŠ·›¿`íSˆƒ¸ËS“2“üZ¾º"Ê×¢i^Wí369h<ƒ þ ÈV0b endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001940 00000 n 0000006790 00000 n 0000001881 00000 n 0000001730 00000 n 0000000015 00000 n 0000001710 00000 n 0000002005 00000 n 0000002106 00000 n 0000002501 00000 n 0000002046 00000 n 0000002076 00000 n 0000002817 00000 n 0000005369 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<67093C991303B7ED1C4535AC180079E7><67093C991303B7ED1C4535AC180079E7>] >> startxref 6913 %%EOF queueing/doc/qn_closed_multi.fig0000664000175000017500000000274712762046576016730 0ustar morenomoreno#FIG 3.2 Produced by xfig version 3.2.5b Landscape Center Metric A4 100.00 Single -2 1200 2 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5310 5040 270 270 5310 5040 5310 4770 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 5580 270 270 6930 5580 6930 5310 1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6930 4500 270 270 6930 4500 6930 4230 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6300 5310 6660 5310 6660 5850 6300 5850 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 6300 4230 6660 4230 6660 4770 6300 4770 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4 0 0 1.00 60.00 120.00 5580 4950 5850 4950 6030 4500 6300 4500 2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 6 0 0 1.00 60.00 120.00 7200 4500 7470 4500 7470 3960 4770 3960 4770 4950 5040 4950 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 4 0 0 1.00 60.00 120.00 5580 5130 5850 5130 6030 5580 6255 5580 2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 6 0 0 1.00 60.00 120.00 7200 5580 7470 5580 7470 6120 4770 6120 4770 5130 5040 5130 4 0 0 50 -1 0 12 0.0000 4 135 375 5130 5490 CPU\001 4 0 0 50 -1 0 12 0.0000 4 135 480 6705 6030 Disk2\001 4 0 0 50 -1 0 12 0.0000 4 135 105 5220 5085 S\001 4 0 0 50 -1 0 9 0.0000 4 105 75 5325 5141 1\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6840 5625 S\001 4 0 0 50 -1 0 9 0.0000 4 105 75 6945 5681 3\001 4 0 0 50 -1 0 12 0.0000 4 135 480 6705 4950 Disk1\001 4 0 0 50 -1 0 12 0.0000 4 135 105 6840 4545 S\001 4 0 0 50 -1 0 9 0.0000 4 105 75 6945 4601 2\001 4 0 0 50 -1 0 12 0.0000 4 135 585 5490 6300 Class 2\001 4 0 0 50 -1 0 12 0.0000 4 135 585 5490 3915 Class 1\001 queueing/doc/power.pdf0000664000175000017500000001530413356152314014664 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ­VMo7 ½Ï¯Ðq}XU¤¾¯)Š=5ñÞ‚ ÇNRxã$ë í¿ï£4šá~ÔuÂ;¤¨'ññ‘³_³dœüÌŸ·ûé§7Ù|8LdäçÛ‡)úb‹#Ã5ZªÕì§èÛ²8–_(Á¼?X¶Ìgño %9þþÞOÑü˜Ú¥Ì›__rüõ1àéi×—0Žopýo7~ÃW["_¼È0s&ëc ¡àÉ&…3;4Ìpu”a)ölP ³Cƒ W–ñLÙ²™d¸:ȰH r ¢™ ;úöþ¬6ÿ#ëšRUˆ5@t©@©_'êÏóÇíÞ¼ÚAÏE»û©KœL$¨‚TŠÙí§·wµÍ5FëâÆY†}¶5ÃÍ(ÖŒ¤Òö[Ó†®Þí~›~ÙM¯O•|.šâm8ï) ¡Æb‰/*¼^QÄP}mì^çÖͳ­ö/B‡ŒLhJ*‘në=~6ûOöôÈl…ˆl ú¦ªhÚJ„ßÜ}“¨¹mœ êw4;yXÌ rÙœ?àQKïvÎãAæ%¡q8Ή~)¸h½ŒÇŒî•úS¢hª|²äÅS86jæÄÃÎG£H–º3ËÄÈÉÙ, $Y2pä,Ü8áP‚–mí½ ôû¦åóÿ£Œ5TÜäüAU\h—\«€BárYU¡ôRÖU ‡ËµÎU ëÌð\"\»%0ª@ †ª€œ0¥³®‚´yðº #ÀU¡&¶I—¯¹*Ä®eà@?Q•Á¬­A•¡«¢è2”œú ×2Tgk\ËP"ú+ÏUL{ç\¨æüAë*tšµÞreÒz' ÍŽôžª°©ôS²í];˜ö± Šh8Ê,å™èîÑD+ÏLôºkÝ€›NÑð —³"ÚGŒJOŠhö6D#-ß“DsÁ gE4ôÑJ4“(ê¿ oGE&J¯©W˜çÝÕ¡yyvðê¸þëðt·×ß .·ççæGméW¶r8ê,¥ç¸xþŸÎEI‹Iƒ’0u|ÌK¤é©}9RPÞ‡`)a½”}B¶I²•/¿Ë+ÃÜ̹ÿþù¶½jïÍÓÇ» /ŸÆüëéo²”bendstream endobj 6 0 obj 1061 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœUiTW®²éªŠAT*%àÒÝ5ˆ­¨¢ì Ê&VÈèQˆÁ¨ÈCxDŒAY\pI‰ APƒšq -¤ˆH¢£ÉÜâ¼öÌ< ™9ówΩS罪º·¾ï{÷~—¦ô&Q4MOöŒMΈMOŒ‰ÛYˆ³hqö$q¶aõèÑL©8GŸBú¤¯W>{ò]C¸=r¦Bä4JBÓöιæAëXZZ¹lJÉLMŒOHWØÙ.R*¢3¾Q¸Æ¦%Æ«óÉ"#6ySŠ*V¾6Q½%M¥Nûoàÿ—Š¢¨wÕ›\RRÓÒ·lÚ–ç—˜¬Zd·X¹d©Â~ÙBk[Šò¥ü¨¹”?H­£‚¨`êCÊ™ ¡B)WÊò Q^”7¥¤ÖPk)CŠ§Þ¡jeDÑ”1eBPS©é”)‘‹Ò#û¨´½‡þÇ$‹I‰“Š%Ö’’ Ð[«—§×*"µ“ÖIÛkÆ—©f-Ùp¶†{³à‚¹Ü0‡ßòƒób#*$”vt:õÂ#þ«±TЕö–oùgSG_ë•þW¨`µÞMóe¼­# QE8sý,‰Oï­:éJ-4j%pJ¬°ùbSìŠÝúÍ`˜ü+Á{É+l%/pž59áxš¿“u@'ðÀßƥw‹#Ýôµ!ɨ…ˆ5(m4X‰ ÷“ƒ|½\âÍžŒ°~ÕÜ6×Ûþ÷S†¸£ÏË ˆ³dv…ä$nW«|×$:"ϳ¼ÁW ,˜6ßÊRŸ“ŸI=¦:²Žƒª-4„êÍ1ª×µF|ËM¬zá4STŸÖ†8˜Ý48€ë˜„årÞÖ$m\Ã=fy+'†o,áéx:~{í [»€.˜ Sow È  è¸­dO‰a;InÄßmÿSÄSlÞh6{Âò¶û³wäÌ BÑIaŽï7LÌ›P°N ¹Z‰è-ù¯<¾ÃSƒ÷},–_ÙÓTrͶï²Ë3PœIHèÇΑ±GË2d;Ží>¶§Š[ÌÄSÚüaÁoÜÛòR³áªÙ)¹Ã /Õe¨Ê¤þê¹¶*ÕëöË à|úÑ¢~Ò#Cߘ» ÏuõøQ§`‚*Õ-eÇ÷ÿ­BÖÁ~š·3? qñ9…UrÀ}ã§ü dŒŸaKìYùȈß&fÌK—á–¯Uº)½¢¾ù^&²Ët欲%ð2ÞµÕŸ©oçœYr¾ãâÐâõ`-–J2f:«¹¢•tóžÎJA6 XéJ¥Ï˜—¢Í:éøEÛNúŠŽöHÄ õBî¾½hâÔŸ;-‡»ìGœÖnÙ/KKÉQí[Ïõ2‡þ~é¬q?]Þ"ßÂæÇgîðÈÅ“·gîMÚ±vsròà¬Z}ÿhm,¿Ù,û<ètúMtÙ_qˆÃóÁC@›ve¥¦'&GŠ8ïØó·*+ÊŠŠV%å“7Aj᤮ð9¡ q6„©.¸¯Á%ÒaL Œp„t„!QXÝ=úánLÇótVx&ákÇ€›®‡ H®ù ±¯Â«MÁô{Ú€)%¹ÒÝÃã=Q0Š<¹©fë¹ÏÎåßàö· ‡Fš¿ïEÜ“f¯…¤Î}HÚYè~R_G]e7sñÄñêCPþ Y;»íàÎRVNVÊíÜ<:tá=b¸–”‡ *+Ýp¸›þeF$à÷Èdn£Úâê‹5ßœ¨C?p0gE'ž+Ã7ߨ†q–†`v 1ÌÁ!8ÌNþ—‘S ÝÑC|LÒ1ªÞ¨zˆ‹yXÅé]ÛKd'3 SQ7áeý>·æ­ŠL_*ƒs¬¤Žï‹ß [{— Â`™®´‡á_ŽªôìM{‚”ÕK Ý1$ÒCqH,PCÞŸ|Ó»´O%ò)Í—cc»ºÀç©rð J»‡LÐÆŒ˜ä-ꌈ?䀂O$\I¹ðéÅ‚ZÒºžG7œipïM Ò¢Kê*ë«Ï· ïÑ``«ù¼ºÞxñɤ ÔÄ=l©ÿ¸–õ–²q°£n%t[¯¬Oû7ª1tÿÇËSÆ.#þâ_vÞÍò?ütënÛ½‹±ž2üfìÁØönåF¯±­8‡}tc[T†_¨,¹)ê¤âx[7¾yƒ÷˜†¢~ Úº¢þÑx6K¶ndz3¹Õcô‰M¤¨–JÄZA÷søÎ…KÚÆMƿݺþ  ;iMQÕQ—Ö÷D‹'qÖÔØ‘ûÈ aÔ~¶èdyÍ·g×uÇßÑÿãŸx¹M6_ú‘Ç.lg"&3Þßi(ÊÝøvØ }¦Šy~=Ri»n­Exý»åÄý c‹“ªÜÚFˆ+ÎÖsž&4,='矴žùªáÁL˜¶âž…Í>pÀ ódýLAÍÁSGÊJ.ל¼…8M]¸ã‡™É³äi9I{׿sãäÁæ1 ]„¸Ø¥\~l*&z³ø‘.LjÍÂÇNe îû—´°ÑÒ¢Ñ#e4DÐMb‚u3¤?3—ë¿.nBÜp³·é<¿5–NáÕ]t‘á¦ÒÍßÝOî" Í^¼ PX?dzCbv¨¢å*…k"@«Â4ôÕa¸D’ï/Y0ùƒL!Gäåéºm1ÂF;]]}Éï^2ñE˜5òÞ“EÏ0ï¶nsp¬¼<š~{‰î¡«1_¸qd¬9O}-m}½V,_ÓþtðÎ=íXcO4×o„Jñ µRäìˆw»có`œÍ=cªaë¬%$NŒY¨~YêAïAÈ'7#~Dœ%NÖ–W¢6åcbÓ¿¥îå "dü«Ñ1~3±ñˆ ¨øõ)wÅ4/¿,ãG0Å£k‘.¡‘«V†Õvt\«}$ç_áÛzýwüí•~¶K|›{ûšoÏaøì>ý-äJ  Zœë¹Ì˜7½¦µ¯%øZ03{ÍLŒ—§DÀA¨”@Åh¼à…|Uq¡«Ó-žÉá¼.,€Xtƒ¹ Øò,¼U×àwÖqŽzÃuøCa¹À:ü„AXÝ顆 ½\,=EI_0?Oz[s@_¿§P Eýl L× endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001376 00000 n 0000006296 00000 n 0000001317 00000 n 0000001166 00000 n 0000000015 00000 n 0000001146 00000 n 0000001441 00000 n 0000001542 00000 n 0000001941 00000 n 0000001482 00000 n 0000001512 00000 n 0000002274 00000 n 0000004875 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 6419 %%EOF queueing/doc/qn_open_single.png0000664000175000017500000002345613356152303016550 0ustar morenomoreno‰PNG  IHDR’Ý!  7iCCPdefault_rgb.iccxœ•‘gP”‡†Ï÷}Û ì²tXz“*eé½I¯¢Kï,K±!b"Šˆ4E €£R$VD±° Y$(×`QA¹?rgâÜ;þ¸Ï¯gÞyçœ3s(¢¨(@Jª€ïçbÏ ãÀ7Dò2Óí||<á»|àî÷;ß…“É€Èç¥óH.hæÒÈq`E%¥ óÀ⇄† ·€÷·O+êo_?ÀÏÅhqßxÔ7þŸ½Êv|ABlL.Ç?-VÉádú¹ØsÜ8>ü´Ø„ä˜oþ¿ÊßA“+pHKßÂOˆ‹pþg¨‘¡!üó‹w¾€ÂüïÿÀ7½´Fî"vàŸ,ª {€Ô“2ÕãŒB€®{¼,~öß` ¤AT@tÁÌÀlÁ ÜÁ 6â!øù° Š Àa¨zh‚h‡³Ð áÜ„»pFá)a^Ã|€eAˆa"Òˆ"¢†è F±FœOÄ E"8$ÉBò‘ÝH RŽÔ H ò r¹†ÜF†‘ÇÈ$2‡ü…|F1”†²PyTÕG¹¨ê Ñ84ÍC ÑýhÚˆžF»Ðkè]t¢¯ÑE 0*ÆÆ”0]Œ‹9`ÞX‹ñ±íX1V‰5bíX/6€=À„Ø<ö GÀ1qœ.ÎçŠ Äñp¸í¸R\ î® ×{€›Ä-à¾âéx9¼Þï†ÁÇásðEøJ|3¾?ŠŸÆ l‚ÁŒàJ%$¶J G „«„aÂa‘H$JuˆVDob$Q@,"VO¯GˆÓÄ$*I‘dDr&…‘RI¤JR+é2i„4CZ&‹’ÕÈdor4y ¹ŒÜDî%ß#O“—)b Š%€’HÙE©¢´SnP&(ï¨Tª2ÕœêKM î¤VQÏPoQ'©Ÿhâ4mš-œ–EÛO;I»J{L{G§ÓÕé¶ô0º€¾ŸÞB¿NNÿ(ÂÑq‰Ù!R+Ò%2"ò†Af¨1ì›yŒJÆ9Æ=Ƽ(YT]ÔA4Rt»h­èÑqÑE1¦˜¡˜·XŠX©X«Øm±Yq¢¸º¸“x´x¡ø ñëâSLŒ©Ât`ò˜»™MÌÌi¥Árc%²JX?³†X âÆA¹µ—$„lŒ­Îvc'³ËØgÙcìÏ’ò’v’1’û$Û%G$—¤d¥l¥b¤Š¥:¤F¥>Ks¤¤“¤JwK?“ÁÉhËøÊäÈ“¹!3/Ë’µ”åÉËž•}"‡ÊiËùÉm•;!7(·(¯ ï"Ÿ._-]~^­`«¨P¡pYaN‘©h­˜ X¡xEñG‚cÇIæTqú9 JrJ®JYJ JCJËÊÊÊÊÊÏT(*\•X• •>•UEU/Õ|Õ6Õ'jd5®Z¼Úµµ%u õ`õ½êÝê³RnymštMÍ ÍF͇Z-®V’ÖQ­ûÚ¨¶‰v¼v­ö=TÇT'Aç¨Îðüó5©k׌ëÒtít³uÛt'õØzžzzÝzoôUõÃôêè501H6h2xj(nènX`Økø—‘¶ϨÖèáZúZçµ;Öö¬}k¬cc|Ìø‘ ÓÄËd¯IŸÉS3S¾i»éœ™ªY„YÙ8—Åõá–ro™ãÍíÍw˜_4ÿdaj!°8kñ§¥®e’e«åì:u1ëšÖMY)[EZ5X ­9ÖÖÇ­…6J6‘66/lUl£m›mgì´ìíNÛ½±7°çÛwÚ/9X8ls¸êˆ9º8;9‰;:Õ8=wVvŽsns^p1qÙêrÕïêázÐuÜMÞçÖâ¶ànæ¾Í½ßƒæáïQãñÂSÛ“ïÙë…z¹{òšX¯¶>u}·7x»yò~æ£á“áó«/Á×Ç·Ö÷¥Ÿ¡_¾ß€?Ó³«ÿ‡û€²€§šY}AŒ ð – ¥`Çàò`aˆ~ȶ»¡2¡ ¡=aİ °æ°Å No˜7 / Û¨±1wãíM2›’7]ÚÌØ¹ù\>"8¢5b%Ò;²1r1Ê-ª.jçÀ;Â{m]=cS3k[;gw(n.Þ&¾2~>Á!¡&ám¢kb}âR’wÒɤÕäàäŽRJDÊ…TñÔ¤Ôþ4…´Ü´átô¢ta†EÆáŒ¾¿9ÉܘÙ#` ÒƒYšY{²&³­³k³?æåœËËMÍÜ¢½eß–™<缟¶â¶ò¶öå+åïÊŸÜf·­a;²=j{ß•…;¦wºì<µ‹²+i×oåïwïî-”/ÜY8µÇeO[‘H¿h|¯åÞúp?$ü0´oí¾ê}_‹£‹ï””T–¬”òJïühøcÕ«ûc÷•™–;@8z`ì ÍÁSåbåyåS‡¼uUp*Š+ÞÞ|øv¥qeýÊ‘¬#Â*ϪžjÕêÕ+5ñ5£µöµuruûê–ŽF9f{¬½^¾¾¤þóñ„ã\ºÕ+ONdŸxÙÔ4ð÷§–f™æ’æ/'SO Oùêo1kii•k-kCÛ²ÚæN‡Ÿ¾ÿ³ãÏ=íºí 쎒3p&ëÌ«_"~;ëq¶ï÷\ûyµóuÌÎâ.¤kK×Bw|·°'´gø‚û…¾^ËÞÎ_õ~=yQébí%‰Ke—)— /¯^É»²x5ýêüµ¸kS}›ûž^¹þ°ß·è†Ç[7o^°¸rËêÖÅÛ·/ÜáÞé¾kz·kÐd°ó7“ß:‡L‡ºî™Ýë¹o~¿wxÝð囑kÜ|èöðîèúÑá±À±GãáãÂGÑf'?~û$ûÉòÓø‰âg¢Ï*ŸË=oü]ë÷¡©ðÒ¤ãäà ÿO§xS¯ÿÈüceºð%ýeåŒâLˬÑìÅ9ç¹û¯6¼š~þzy¾è_bÿª{£ùæüŸ¶.„,L¿å¿]ý«ôô»“ïß÷-ú,>ÿòay©ø£ôÇSŸ¸Ÿ>žYÎY!®T}ÑúÒûÕãëÄjÊêê¿B,¾½‹ Þ pHYs N NwŒ#tEXtSoftwareGPL Ghostscript 9.25Á™? tIDATxœíÝÛš«¨Ðdýþ¯œ}‘Õ¶ËSPQaÎ1®º³ª •¿ Âûóù¼€üótúö~¿Ÿ.Y|>Ÿÿ=] ”Ø€n˜$¯Ã-\d|AÖhº!¶ bº!¶ bº!¶ bº!¶ bº!¶ bº!¶ bº!¶ bº!¶ bº!¶ b€Þï÷ûý®x´Z‡J蟧 @»âðóùì=ìûý.ÿ­ãTñ=Ú™òtJlñͰy:.¾>üï ÉwE`§%¶Bù|>ã`RyÏã1ôü_׎|¸H“7=&y`‰m€Œ&Cð ðv&¢kÅ×Ü’×8’3gaGÄ6@j’»/b€ÿHîÆ‰m€ìÚ¹zÍOnIà‡í§ÅÖè…g'=± À_†»ÊK&ÌŸ;°ðËÏ‘wÍ$9Ëaùù|¶C´îRe?ߎ—Ø`Û(Ýõ+ßÏv!± À)gn>O»´øab€³ÖB/ù-™½‹Ø ‚½cn™}ŒØà ù ä…á=ÙÈ„rb€¿âs×xþÃ%ámEÕÃÄ6§,>¸µ+¹)'¶øÏ™Mµ÷.ºb#ÎÄ6@v‡SóØ äuËØHíðUí5‡/Kîb ¯ê™}àP’{± Ñä~ﺓÛ{Ó×íiåìÊ$2ÇË}/¦éÏÈ<<>Æ»–aI¸˜yº?¸.;Íí8°]æáþÜÙ³pê{û8»æÏ÷Ãã¬Û§ˆm®6Î×¶ bº!¶ bº!¶ bº!¶ VI"ȳ–u³«D[‚½Ä6û”Ÿ$•,Æ.b€ßêÎg\´óXbˆ |×ÿÔU€’÷=¹¼¹U¢wÛLîRnþ[ó·ß%Ä6TOë Û‰Êï b€'ïÛÎoÉ=!¶R›‡åSI¹˜ßßÿÞ± T³OZË ¼‰m€ŒÚd¯Þ‹Ä6@.íö˜ðž°&9@"“Ìþ|>]äß¼œy–³Û)¼ßïÉÚd]ö˜ä~‰m€ æƒì§JrÒäl#ar‹m€àÂdö`’Ü©Â[lD/³¿ÒN˜‹m€°z¿˜½-gr‹m€˜2lŽ™ðR·Ø(CfR%·Øˆ&UfåIn± JÂÌþJ’Üb Ž´™ý•áOÛA$Ï쉨n± MæÌ?Un0Hªú^Ëk]dæ¹SȈ:æóù ŸÆûýV¶!£aëñ׉®ãÅÉ LOs‹mHgm»âÃɽv0ù."³Eý(Ä6äR’ Rví$€;ùÌ'†$Ò‰£Ø†Œ*öï×¥È "%Ä6$ò³‹?0:‘ÍðE,Š7àÛ½¢Hf—ˆ‘Üb²x°Ï*<(XõÛÀ²ó1¿vË:Uj`À-¶ I”‹ˆŸ;Eª‡b¨ïý~sEº\-R Ý£÷:)¶š†À¿òTa¢ò‘æüFlլʼn˜¹H˜(ºY×ÒV"@5kšÆÛÑé—Ñ6p9}7''¶ ‰š BŠmÒéw¶\lC{ǵÆ%Æ7 ò©¦%¶ î$ଵ9çg†ûÉ;}ºÁhXPwCîZ‡¢M_±o¿:± ‰üÜ{x»“¯€và­9¯©sü@Ú×ÚP…؆\JzüÅŸ:ßùÚ¥qn°Ø†ïwü/†wS~ž¿¶LlCRóëdÄV? ]Xû~ǯ÷˜ŽÍrK¤óíO‡!òxÅÇ“;éö|ªÉ‰mHj»?p¦¿8€+|ÇÂ_1F$§q“¤\ךØÎn’…“Úüý׿üþäâ¯O^üþïäÈ¿¾fþ+]·½v˜!ïÎçó‰1p¼S˜OÌ$y^ï÷{ó^{ñÅÉ,¾8X{»_ß6üŠŒ!3W¸ë½ëÛIý ì±3µ|qøp§H=ئHÅä¦)fÈûeÀ}@€z.¶3:vy8@u vn*¶Óyü–.#¨Å€;!±ÍÝbœðÆl’œä^¯’‹mvSï! ­rCÈS±KÈJ |iàk"܈m.÷øÕtÅ›ì~=tžçFÔb›j49è×bx¿nÉïµ§Ñô‹Ä6GìZXmþ¢Öx33äjÈÕù½Ý‡¨¨Ä6¥*®Ï|µh_I~/þü¢ÂÞCoPBlóCI{;Ób ©¢ße¿·‘ßc‡? /±Í‚ºóW…‹¬Éï‹ø`©¢âÚ¨ªâb›¿l´Æº-í¶Kh@uå kÅÕ‰mþxªÉýÌoÍžêÉã|÷Û´²²ÁÚœð>ÃÔ#¶Sk$°çÚ\¹ àqb;©f{°¶rSkå¸Óÿž.h?³ŸÏg¾¯¨G} ™!‡xŒ¶sé(°Ç·*ê¢äu‰íD&™Ý]ìMÂÛÕn !“äYôžÙƒùœùS%iœrIl§0Y¼÷~\ri‰íà&7põ؃Éɇä’Û‘…™_#¹×˜!‡¨Ü’VøÌþ/Ìâ&52»n{½…†ç;ª—dí€ÃÛ¥jõb;¦$™ý5_R ÚXÞÿðí Û=É÷_7Þî|IÖ®ñ­½ub; ³·MÆÜIþê5fÈ“›œÈΫAIv–œúÿ[W)ÉâOVÖwʵíÈRõÚ®sC-»ž=¹®Ÿùyšª‹ˆíh2'–䆷_­ø!¹ÍsÀZÃ)¯E&÷+YcÛqÈì/É ‡éFÚ'¶ƒÐØ€¨ Ÿ@KBlG“­/J;à6CÎ.u[Ç™Z·ëI°ºoݱAªd*”6¹á°ÖZÊüñ°ÖJø±Ý=Óãk|°¡,\û%¼-·‰”šV{Ȱ‹r ¹+jÑá’Ì1C‹^c´Ý·äg@‹ vØm´DÚÏŸR ¸an­ÚߟygJ²¶šiÂvm´½OÉ펷5“¢{>7WØk»ªÜÙXv-êR¾?XTb{‡ÃÛæð,I‘$On±½[#õÃèê˜F¾>hÁâ¶Z-”¤úÏG"¶k¥ÍŠý¨x$”¶¶‹í.é¦Ï0à†϶”òûÔÊ>±½ƒŒìš¯~ÒLÚ'¶hä$Tã¥>p¥½}]ݾq×ÑòÔ±]Þ³}ÃW“g> öš¯^ø‹W u>‹æÛïU«$ÃqæzeîiÅvOœ0¦>p¿Ç+ÛãxœkÛ»©4½s?9Ð/±}œN[ÚÝp®c’¼¦{âí÷¥õ ÌCNFÛÝè" {a‹: SbûþšÏ¿ž.@Lb›Ôº˜˜3Ci‰íjt \Ml@7–cûý¯›KÓ‘§ÆÖÆô˜!‡Ìb{²­ð>̧@]žÛ®ccÜ3NîÃÃ#ñ_ݰ§@G¦±=Y¥Ý^IuU‰pêê«z›!‡ä&ÉÇÝ®aÃÏgû æ÷Hí¢ÓïIòï\b_#’¦Ì·œ›3  „kÛ”­ç 3äÀ4¶ëvI¦¯û3“|€ó9½°ÜJg @fE±ý‚ xVѵíÃí \‰]¯´ºû?Òר:nI{FIÿ;éÓuÙuù<ýŽm½[-¢Ɔ•Ý< im_«zTë¯2ûÛ“Ô‘»ld¶€J3ç}Fž. ½šìd³5ÚÖ/œ$ž_ÍÏд\6€¹¢kÛº6Jü\®UE8i5¶ç]°ý‰ŸÕþçßQ*7þIns?9d¶{qÓ®û»|i-ǶM¨ A¶!×ÚÝOi-Äö¡¶¾ã:k€äö¶mÚŠí¡ö8¹¥8 0CþeêršÆvyðþ׫ÿ°#:k€ÌVGÛkI,¡à)Åö±œ §afÈ¿L½@B­’VØ—Åèòúe‘,€´<·M†¤@b»o¢è€HSæÉ¹Çpr­£Õ:TBE;€Ñšö·i‹ vÕóòó×á°'/Ìo†kGˆt.þ“Ñv¯ ³ŽIռɿóù,ÖðÅ×Çñ^­Êm!U7h´M|±›´[™˜ÌÆ µbR=Æcèù¿®ùp‘&oº×ü1É¡òÔ£íŽpUC‰É|£ùüë–r-N,Æex¶HÛAHî5ÁžÕ†º “ûq%+€µ\þŠÄvßD/ó.œ“0ùº&¶ãÐÞæ µa¯Öz’Ÿ­³µn±Ý½lU¶\k½4«ån¤å²=Âä¡ä¹—ò§Å;is?9—Úž¸:ù8µ§±wÛŒŸ÷ÐkOø4`¯¡)™²Z|~ìÀÂ/ç/i%iì&ɃpSɘOö*_§e¬ü™ïÂ28T¶ö.¶ãÜ_Ù¦Çî'ç"ÚÑ®_ù®¡v²µæiìb;É6³áAgz›“ãõ„ØŽ&sVÉlxÊ<>KÚ`­9öTí]lG–ê¦Kº‡yò‚ÅÒ¥Ôs± Пñs§Hg6b›ûìêh"53¸Ž–²WïgC/cª¼MN­ª+Éï+ÞŽmb›.ýì5† •²pÒF~W<8…Ä6¼^é>pCNçw%Òç‰mú㔟9ßàý|æ°¸)ñ%aˆmØÇx؆"†ì@ Ä6ì`¨ µòŸAlðGÚ!lGÄ6Ëöaëym§»HlðŸùJà…¿xÅ#ÔÛïžgb|Llð—½Éý]°ì¢ñîÞ‹Üá‰m€PªŒA wß^_[ô|IÖŽ3¼˜*³_¯Wºeáàqi».õ3#Õ·‡­U’a¿k‹°ðÄ6ÜMlÓ¯±u’<ÎV"”z> stream xœ}UMk1 ½ûWø–M!®%ÉÇJ ¤dJ)=M>JÙ-$=ôïWöXöt³³2ëçy’Þ³F~ÑÖ€¶å¯=§ƒzŸôóåMBAÿUu_ßV`1B™ŒÈêA ÆÙ =°M5:o‚ËõÍàB_O É3ƒ:Rž•Ñ"ÈZr0£!%ve´>BeHYOJªDª”Ç:D]2E;9cgu‚ 5…ÙÆ¬sÌ&:§]p†ö5—š¡Ao+£Ë9˜¡%@æ\=C[e±½_^`£K˜…½Ôþþç½Õ¯*qG¤uâž !°V*ÞvdßâÚ'F„uÉü+`íÒRéþM®=õõþÝ›‡«-'ÊEDÇQGöáF³ ²Uw'­2Š=ëMäC„„ oÞ$MŽa©òÒJŠD,!.Þ‘›7ßµK&e¯py'¾<1FaÕˆ>&‡ K«†¾õºFí'­NN¡ô[ŒÆ–DïLäÎd?°ÜÌ tÒ*€èøÈ`ÑljºOcpͧÌ2;²8öjcë1G‘…Ÿ@zB:)Öл^ª¨9ëœÃ̪[8'ÈpÎq2ÂEèu@Ê]qœh­ÃÆ=5÷@7r4E˜•’ó ÛÞ"#ÿñ<ÿßÈ…üõÊEܶݳ¯Ïì(Ì¿Ûc:è;¾—IgŽBAïžÔ|]ƒÆhÐçÈþ£‰ü5ìjóáöær÷K%68“×»µ¹þ²½¼PeàVëx€—µÙ~Û–w¯<_•TîF¾:mª[P66Xx‘#ÁLs±nºÊBàÞ‘¾‚lÈóµU¶nçˆ=™çfâû¹l]×­ò¸PŸvlÕúuÛ«Œendstream endobj 6 0 obj 725 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœRkPWÞ%d÷VcjI#D4DìX±‚ލe|µZÐ"P(¾QD @B Ù$JL.K  ÈC¬8 Ea¬–¶¾Zk©ÊŒŽŒ§?ÚRê»é¦3]¨3íïþ»çžs¾Ç9Çüý0Ç© ¥¼0"Y¥ÌÌ›‰W0Á8³ÈỸ”÷•w=Ÿ‘ 0(àAë"¾$9ßB¥o"Í|ÌÇ£Ò]Ë?IN_¾2N•B­ÈÎ)’E­Ž\+;|Bö:#‹—*²ód˸‡V~\•¯”çíR(k e³´²dy¶æx¦ú¿ÿ¢ý?| ÃælÍØ‘¸3)eMd†…b±0,[…Ebk±·±L„Íå€ùcrì .Âà÷ü¶ø½àåòºx¡*¡7 ¶ O™%-¸7Í#>PUZŸ3ÎÒÌwAÅ{ÔgJ`—™JöÚ$:´ÇCî-vuU¹«B® 7ø¨‘ wå×@JÕzKšèP-é3¢z1"Ql–Àëׂ£{Ó7[ªTÔÚ­Aã—»ï@pwèPB¶!G]¢äRr»9ÉÃ|î“<4g:ÛHl‚z§}0¿šÝ¾šO‘ýí5u´ÖrC¸mÛõÔfûlï#¦mG/'yŒ -«³v›Ë÷Ù%¬…@1(þ§ŸûÁ'’©—¦¦kŽdIs†\}|kEÐÀ¯=Ý÷!xþUrtÌþ÷¢£BØmìn¾‰YH )7“V¸‰¾9ÏæöU Á< û-Yf endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001039 00000 n 0000004436 00000 n 0000000980 00000 n 0000000829 00000 n 0000000015 00000 n 0000000810 00000 n 0000001104 00000 n 0000001205 00000 n 0000001461 00000 n 0000001145 00000 n 0000001175 00000 n 0000001705 00000 n 0000003015 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<39A4D40FE2422509EAB915E02CB87487><39A4D40FE2422509EAB915E02CB87487>] >> startxref 4559 %%EOF queueing/doc/qn_web_model.pdf0000664000175000017500000001543613356152314016171 0ustar morenomoreno%PDF-1.7 %Çì¢ 5 0 obj <> stream xœ}WËŽ7¼ÏWðhX†ïÇÑN‚œíàCƒ#oR`ïÉï§8ÓjV|Xw‰ÝU]Cöp¾g½qãý=ž—?VóõeI¶†²ùoY7]jJ¶ûdš‹¶´f΂Ôä­«¦ôd}øëltÙ”èmŽYâã’KCB$û¶fP™ Œ”²%Pî«u¥ÇÇ…E0"ª©Â¾‹ãò×ò¸„îmlU²ÎÂÌÈI’,EŸc³¹CêûˆJŒäêlïÅøÔªmÁäàlˆC¶Ásx\|,a]O¿Gï×åœN1ŒBzÙ¶üš ñm#È ÖLv-ly×2œ¤³ð2r„¤Ÿ$I5¨×hkn“AÉ>y1¨ØZ³4À±Z$+ˆW*pLê‘wû ‰IX‘"«I²‚TJ…]—.qÖybÞu‰Õ«MŠ`KƆ½ŽÞ|ж$ˆk~h  üªÈÙ”M5Û\%>.!ø`Çæ]¯Tcâ@#Á•­&U¹®ÌA12X¯`•\a×ùÔc¶)JÖybÞ“"¤þ¤Y‚¨O©DŒ‚>ù”NLâS̘s¹H«O²‚˜¥ÇÄ¡>åP¨æV!ײeÇꓬ •Ra×Ç¥Oœ¥>1¢>±zõIõIÇ7#4}Y O3nAÇ77)+ˆ˜ P¨£U¾\€‡*Sèøf²‚Us…]—.éøffßŒè°æ¬y|_ßw¡e‡‘Pœy~Z‚ÃÙDh2 Û"6E‹…“µÛPÇ”ã”;@sÐ?øK–Úúôƒùg )e[’,Dg-…±dJ%ćhcHµ=Æ1«^!S½¼æ™óáU³7uJ'W=ëPäjÒ:8±ÛLçþB’sñϳ̃rÇ$Æé{Ÿó.4üw×ð¥7)î÷ìkÇc˜+5ìU\V´g´ι‡4\z\œ_—LÒ³Ï/±6÷Üj³5îz¾¢ô&Åýži7T8ëú|8ÑÓQK¶­{ÝB÷€m×éÅbÇ#ÿf°‹jOæw(û"§Eï(¡†ný\i^âµÖÑiÀ9À-ç52%ÑYQd:+ÚüMÙÒØÝ£…x£h¿‚H)ɺ‡Ðsnh;®[NòVšn{´•.=¸¦ý&ç}ø˜M¥hFL60"¥$ëÂGZ%í¹nÙ _8bM‘K®i¿É9Ùà>Wòza Zó.‘¡¢Þas߆>Å Ò븺‚oËöªc/·^F·š¡G›Ê¨±±rŒyœ“$jd/Ush‹HMމõ(›ˆ•&„´SMéX9æ×;Ck³K;d¼Ì:ÌZ‰¶«0I,.2¹ÄwD5¥cbU—BÄ|Ì“I!ù2v?#<‘¸¤Äb#j’"›t®É­m¤~gÒöþüGËoÿ§?dzyÀw=Ü‹qøsÙ¾÷½³ÅÔŠKg2‡óòÆ¿=ü½€!–ZÌø?]{ø²¼‰ãgb²_G+4jwœð–Gé Ò–z0ØïøfÞRß}ûfÍãÓó¿OÏ/œ2ËÁÈm t°-'Öœ2Óåʯ¤+ ÆfOO·KlíuÝÏï‰ÿ ýƒ/É&—Ð.Ä»¼eütúüòbüF9—Ú~¸Ö:¾]Ä#Á·z+8ocõ§§?&æ_–ÿª%sÄendstream endobj 6 0 obj 1260 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xœV{TWŸ23ZJ-i$Mض¶ÝªµX¬Xm¥@­¤¼ß- ï’@H $˜Ü ¯$<$B@ @µPŸØV˱ŠmUZÛj·=•ížs‡^þØÁ³çìþ½gþ™™ïÞï~¿Çù¾ËÀÜÝ0ƒá“#o‰‹Ò V¾_¥|Ôz7j Ñ_K!,Šï&ðpw¬_äO? MÏ@éÌÁØßôJlTüß7mÚ,.,+ÊÉÊ.ñÝöºŸ¿oF™ï"¾!Â✬ß—è©0_\(”„çˆ2$žOÎõfIòÓ‹þ÷ß³ýù1 [ûnPpaHQ±4=Cÿ†ÿö7}_óÛ†aÏc/`/b‘ØF,‹Áâ± ,Û‹ùc°ì9Œƒ­Å¼1ö æ…±1oš%Ì2V1ÊËnynW˜QÌI÷d÷iŸu–µŒWÏ¡ÄÒŸÜAÆ“ò4y.e;L¥þfg,ŵs>6©²o¢êW†£C˪Pô’ª86ÝìhèrìÇÝ6ר:èîwòÑI&¡œßÀ¤Ö¥ ÙgJz2¬±ÒCKòÊ2ªö2Iiu àˆ;”ÆŽÚúV㸑Ë~ ™¦k ÛÖÝ é› $]£rœúçƒ.™¹„QñœJ(aIq­´\%•@aRÔ%µ&ZRÀN æ½­¹‘( òÐz˜ YL~w‰_Ö²Oxa Úž6s&ÿ'ÝI¸ÿ!$áÆ™i顾3Ï&nÿ€ô¤Ž"©”ç%¯oîAÉ‚7»¹‰8P׆U †YúìÒ\W§zÌ>õ3t‡áš÷¼Z“*¸Mhkb¥ÙGbä¼rÂj¬ €0«SËÙˆ«PGhIö|êçœ8ïš¼yfZÅg' ·¤Àà”(× þŠîCÔý!ÆŸ‹ÌckáIð¯“WÎ_»8ôü~*˜>÷þuÄp¡ €D¥ø¥ê?’©T:FQ³œþËØ³å9§ùó±£ÛÂZ±ã­”„‚H•? ªh<á°SvÆ­{̺µPcÃ÷Õ”·è/’PB8Ç>ë­·êÔ|›¢I× È.[kïI©='], NüBèj¢%YÊè2i‹Éjld·µ^« « Ùä©;Tvj{§×Ô¸ó†7 ý+ø%§n`Uàº*ÝQ-ÐuME]‰¥¤®»£âƒ£ï' .äÊZ‹A>/5Oœ°7{x±„_Ž^oÆÍ µ5ôAì„FФï\!SÛs¼Úî3õÂÏŠO~è lVܪè=¼ÑþžÉ™¹~|ZV¥ÚmgP‡©8(pçQ›”µ^]­~5q7B«¶åh °ò@[£yÐDÚP‚‚Ö›Õ“/B4­њ4¦*úјt5Õµz¨æfÛ|Þäö}Uo>a¢ñF¨g¢.PÜ.¯ówá+ßÑx©ð/8r¥J§d‰¦e\ã 0­ëStI\ií€ÜònRXI»¬«Ëaï¨5Ô̽Õ`f²ÇÙ1r¦§ –N -áe•iB‰L™rièaã©—ÇGÓ—ùìæ¸º6Ù¨Ïp4 Ó!´õ.ˆtRU‘²°J ÈlñÀ'‚ZÂxi|®]ñ7íí§®2®ßƒ²™pËÒÛ]M†²°2ù¯ ŠUNÔMÀÈkeº`ù‘/÷;È]„nð¸fÏ×Ã#³eü8÷SŸº¦{»Õ¥¾3¿ã}L"frèÎø;ŽóWX¸ œp1¨Í0€“¼'­ D´¾‚™²aS…„—ñªkê¾"§Èõ‘#$‚”2aNJFaØI"þÜvHüúÍEˆñÑ<ÜÌiœº .ƒ.q³? ás¥Kb§ÐhŽÝëë¨|ìÍÞLE/p¤8{½¤ºB%÷Qy­ÜB²O¶dfZr}ÒAª<· ;¿,ă]ãÑÐ=bîÐôÁn¡õH‘û? ò;pz&òKð(›Õ³ÃÚM-6ŸFÐZÝ®¡3)†G«Nù@òÇ;~3‹¸s‚çgÒÇÁ9òÜØÐ•‰±Ò¬A~^Ëácd7î ûñû=¦c-¬°áa¦ŠÃy’zDT×$”gV„н¡žh46i¢ Jº9& ±JåjÒó¯ ûÒÓv=7_å ¤R|J×V L[¨£gÑ/\Ä…4mG-úZ^¥CÛAWgÃY#ÙŽì¥ÄŒ¡¡r`×É\_4ˆ^¤<4mÕ­ ‘:Zê§jé%úRbJg+Úc—¸6œnE» ÿò.– _€6³2áçíÓÖÏV¼¢tQ?_ò‚_ßÎy³¯Ã-ð.ç"èÔwV^-Ž{É7£CßËÌ]™ü‚6¹YN{\¡”f"¹qëÎñÑÓ‚OG»/€/Átù¤¸_ÚQÚ”ÖN²ïõi÷ÐÙu߇{-1Už—ʼnEÒmÕÜ‘›Ϋ€üb<-4K‘]tX ¢Cï¯ÔA—g©·éa51ÿÎmzPQù°œ³‘ŠLÅÑ—Ë‘¬P8€vìÇ·á®Eí›å 5ð¬ CÔ̤n0á~ê[LÀ[Éh² ?àVš²J­ðG ¤6èèyÚZ½ÅyJsdŒ‰Ìépð2¹éÃÀݲrs‡ˆŸ×%±–R¬T '‹oÝ뙚LL8fÀ-0W:™ôYêxT'ZíxÂ^/å>ÉxkbRQK„«#KƒöNÂZü{Þø$q8õlñ@Â5 ¿B>ä‹V¥Ê4Â0AÜDO ú'Q:ÅùáL0m·Cáï½ûn²ôÚmDZ~ë =é+4U@&ãd2á³pDEEyÝE}ýÇ»Nô>.<áqis˜põZØgÃßòFÃi’ú¨ªAû^g)‰S¶.³«"O°œHèÃäÊ=†'Ü¢:o2àÏ LJ 7pŽÔeFVhR jÇî¶îØ&@{Q$KE­#<•-T\ü¸^}÷©a“‡ÇZ§1ìß¡ÊÜþ endstream endobj 13 0 obj <>stream 2018-10-06T17:29:16+02:00 2018-10-06T17:29:16+02:00 UnknownApplication Untitled endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001575 00000 n 0000006386 00000 n 0000001516 00000 n 0000001365 00000 n 0000000015 00000 n 0000001345 00000 n 0000001640 00000 n 0000001741 00000 n 0000002114 00000 n 0000001681 00000 n 0000001711 00000 n 0000002411 00000 n 0000004965 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<981D62C4226BC6797E91C6E64E2AE965><981D62C4226BC6797E91C6E64E2AE965>] >> startxref 6509 %%EOF queueing/doc/INSTALL0000664000175000017500000001001113356152315014055 0ustar morenomorenoThis file documents the installation procedure of the Octave 'queueing' package. 'queueing' is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3 or later, as published by the Free Software Foundation. Note: This file ('INSTALL') is automatically generated from 'doc/installation.txi' in the 'queueing' source tree. Do not modify this document directly, as changes will be lost. Modify 'doc/installation.txi' instead. 1 Installation and Getting Started ********************************** 1.1 Installation through Octave package management system ========================================================= The most recent version of 'queueing' is 1.2.6 and can be downloaded from Octave-Forge Additional information can be found at To install 'queueing', follow these steps: 1. If you have a recent version of GNU Octave and a network connection, you can install 'queueing' from Octave command prompt using this command: octave:1> pkg install -forge queueing The command above will download and install the latest version of the 'queueing' package from Octave Forge, and install it on your machine. If you do not have root access, you can perform a local install with: octave:1> pkg install -local -forge queueing This will install 'queueing' in your home directory, and the package will be available to the current user only. 2. Alternatively, you can first download the 'queueing' tarball from Octave-Forge; to install the package in the system-wide location issue this command at the Octave prompt: octave:1> pkg install _queueing-1.2.6.tar.gz_ (you may need to start Octave as root in order to allow the installation to copy the files to the target locations). After this, all functions will be available each time Octave starts, without the need to tweak the search path. If you do not have root access, you can do a local install using: octave:1> pkg install -local queueing-1.2.6.tar.gz 3. Use the 'pkg list' command at the Octave prompt to check that the 'queueing' package has been succesfully installed; you should see something like: octave:1>pkg list queueing Package Name | Version | Installation directory --------------+---------+----------------------- queueing | 1.2.6 | /home/moreno/octave/queueing-1.2.6 4. Starting from version 1.1.1, 'queueing' is no longer automatically loaded on Octave start. To make the functions available for use, you need to issue the command octave:1>pkg load queueing at the Octave prompt. To automatically load 'queueing' each time Octave starts, you can add the command above to the startup script (usually, '~/.octaverc' on Unix systems). 5. To completely remove 'queueing' from your system, use the 'pkg uninstall' command: octave:1> pkg uninstall queueing 1.2 Manual installation ======================= If you want to manually install 'queueing' in a custom location, you can download the tarball and unpack it somewhere: tar xvfz queueing-1.2.6.tar.gz cd queueing-1.2.6/queueing/ Copy all '.m' files from the 'inst/' directory to some target location. Then, start Octave with the '-p' option to add the target location to the search path, so that Octave will find all 'queueing' functions automatically: octave -p _/path/to/queueing_ For example, if all 'queueing' m-files are in '/usr/local/queueing', you can start Octave as follows: octave -p _/usr/local/queueing_ If you want, you can add the following line to '~/.octaverc': addpath("_/path/to/queueing_"); so that the path '/path/to/queueing' is automatically added to the search path each time Octave is started, and you no longer need to specify the '-p' option on the command line. queueing/doc/README0000664000175000017500000000211213356136041013705 0ustar morenomoreno=============================================================================== The Octave queueing toolbox =============================================================================== Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2018 Moreno Marzolla The queueing toolbox ("queueing", in short) is a collection of GNU Octave scripts for numerical evaluation of queueing network models. Open, closed and mixed networks are supported, with single or multiple classes of customers. The queueing toolbox also provides functions for steady-state and transient analysis of Markov chains, as well as for single station queueing systems. The Web page of the queueing toolbox is http://www.moreno.marzolla.name/software/queueing/ The latest version can be downloaded from Octave forge https://octave.sourceforge.io/ This package requires GNU Octave; version 4.0.0 or later should work. The Octave queueing toolbox is distributed under the terms of the GNU General Public License, version 3 or later. See the file COPYING for details. queueing/doc/qn_closed_single.png0000664000175000017500000002217113356152303017051 0ustar morenomoreno‰PNG  IHDR<¸Τªž 7iCCPdefault_rgb.iccxœ•‘gP”‡†Ï÷}Û ì²tXz“*eé½I¯¢Kï,K±!b"Šˆ4E €£R$VD±° Y$(×`QA¹?rgâÜ;þ¸Ï¯gÞyçœ3s(¢¨(@Jª€ïçbÏ ãÀ7Dò2Óí||<á»|àî÷;ß…“É€Èç¥óH.hæÒÈq`E%¥ óÀ⇄† ·€÷·O+êo_?ÀÏÅhqßxÔ7þŸ½Êv|ABlL.Ç?-VÉádú¹ØsÜ8>ü´Ø„ä˜oþ¿ÊßA“+pHKßÂOˆ‹pþg¨‘¡!üó‹w¾€ÂüïÿÀ7½´Fî"vàŸ,ª {€Ô“2ÕãŒB€®{¼,~öß` ¤AT@tÁÌÀlÁ ÜÁ 6â!øù° Š Àa¨zh‚h‡³Ð áÜ„»pFá)a^Ã|€eAˆa"Òˆ"¢†è F±FœOÄ E"8$ÉBò‘ÝH RŽÔ H ò r¹†ÜF†‘ÇÈ$2‡ü…|F1”†²PyTÕG¹¨ê Ñ84ÍC ÑýhÚˆžF»Ðkè]t¢¯ÑE 0*ÆÆ”0]Œ‹9`ÞX‹ñ±íX1V‰5bíX/6€=À„Ø<ö GÀ1qœ.ÎçŠ Äñp¸í¸R\ î® ×{€›Ä-à¾âéx9¼Þï†ÁÇásðEøJ|3¾?ŠŸÆ l‚ÁŒàJ%$¶J G „«„aÂa‘H$JuˆVDob$Q@,"VO¯GˆÓÄ$*I‘dDr&…‘RI¤JR+é2i„4CZ&‹’ÕÈdor4y ¹ŒÜDî%ß#O“—)b Š%€’HÙE©¢´SnP&(ï¨Tª2ÕœêKM î¤VQÏPoQ'©Ÿhâ4mš-œ–EÛO;I»J{L{G§ÓÕé¶ô0º€¾ŸÞB¿NNÿ(ÂÑq‰Ù!R+Ò%2"ò†Af¨1ì›yŒJÆ9Æ=Ƽ(YT]ÔA4Rt»h­èÑqÑE1¦˜¡˜·XŠX©X«Øm±Yq¢¸º¸“x´x¡ø ñëâSLŒ©Ât`ò˜»™MÌÌi¥Árc%²JX?³†X âÆA¹µ—$„lŒ­Îvc'³ËØgÙcìÏ’ò’v’1’û$Û%G$—¤d¥l¥b¤Š¥:¤F¥>Ks¤¤“¤JwK?“ÁÉhËøÊäÈ“¹!3/Ë’µ”åÉËž•}"‡ÊiËùÉm•;!7(·(¯ ï"Ÿ._-]~^­`«¨P¡pYaN‘©h­˜ X¡xEñG‚cÇIæTqú9 JrJ®JYJ JCJËÊÊÊÊÊÏT(*\•X• •>•UEU/Õ|Õ6Õ'jd5®Z¼Úµµ%u õ`õ½êÝê³RnymštMÍ ÍF͇Z-®V’ÖQ­ûÚ¨¶‰v¼v­ö=TÇT'Aç¨Îðüó5©k׌ëÒtít³uÛt'õØzžzzÝzoôUõÃôêè501H6h2xj(nènX`Økø—‘¶ϨÖèáZúZçµ;Öö¬}k¬cc|Ìø‘ ÓÄËd¯IŸÉS3S¾i»éœ™ªY„YÙ8—Åõá–ro™ãÍíÍw˜_4ÿdaj!°8kñ§¥®e’e«åì:u1ëšÖMY)[EZ5X ­9ÖÖÇ­…6J6‘66/lUl£m›mgì´ìíNÛ½±7°çÛwÚ/9X8ls¸êˆ9º8;9‰;:Õ8=wVvŽsns^p1qÙêrÕïêázÐuÜMÞçÖâ¶ànæ¾Í½ßƒæáïQãñÂSÛ“ïÙë…z¹{òšX¯¶>u}·7x»yò~æ£á“áó«/Á×Ç·Ö÷¥Ÿ¡_¾ß€?Ó³«ÿ‡û€²€§šY}AŒ ð – ¥`Çàò`aˆ~ȶ»¡2¡ ¡=aİ °æ°Å No˜7 / Û¨±1wãíM2›’7]ÚÌØ¹ù\>"8¢5b%Ò;²1r1Ê-ª.jçÀ;Â{m]=cS3k[;gw(n.Þ&¾2~>Á!¡&ám¢kb}âR’wÒɤÕäàäŽRJDÊ…TñÔ¤Ôþ4…´Ü´átô¢ta†EÆáŒ¾¿9ÉܘÙ#` ÒƒYšY{²&³­³k³?æåœËËMÍÜ¢½eß–™<缟¶â¶ò¶öå+åïÊŸÜf·­a;²=j{ß•…;¦wºì<µ‹²+i×oåïwïî-”/ÜY8µÇeO[‘H¿h|¯åÞúp?$ü0´oí¾ê}_‹£‹ï””T–¬”òJïühøcÕ«ûc÷•™–;@8z`ì ÍÁSåbåyåS‡¼uUp*Š+ÞÞ|øv¥qeýÊ‘¬#Â*ϪžjÕêÕ+5ñ5£µöµuruûê–ŽF9f{¬½^¾¾¤þóñ„ã\ºÕ+ONdŸxÙÔ4ð÷§–f™æ’æ/'SO Oùêo1kii•k-kCÛ²ÚæN‡Ÿ¾ÿ³ãÏ=íºí 쎒3p&ëÌ«_"~;ëq¶ï÷\ûyµóuÌÎâ.¤kK×Bw|·°'´gø‚û…¾^ËÞÎ_õ~=yQébí%‰Ke—)— /¯^É»²x5ýêüµ¸kS}›ûž^¹þ°ß·è†Ç[7o^°¸rËêÖÅÛ·/ÜáÞé¾kz·kÐd°ó7“ß:‡L‡ºî™Ýë¹o~¿wxÝð囑kÜ|èöðîèúÑá±À±GãáãÂGÑf'?~û$ûÉòÓø‰âg¢Ï*ŸË=oü]ë÷¡©ðÒ¤ãäà ÿO§xS¯ÿÈüceºð%ýeåŒâLˬÑìÅ9ç¹û¯6¼š~þzy¾è_bÿª{£ùæüŸ¶.„,L¿å¿]ý«ôô»“ïß÷-ú,>ÿòay©ø£ôÇSŸ¸Ÿ>žYÎY!®T}ÑúÒûÕãëÄjÊêê¿B,¾½‹ Þ pHYs N NwŒ#tEXtSoftwareGPL Ghostscript 9.25Á™? ¿IDATxœíÝÛÚ£(·P³ž¾ÿ[Î:Hý–å.¨h`Î1ŽºSÙð)ð *¾Þï÷]Ztáý~ÿ߯˥„Ýøoú?¦ hÍëõÿÛH €n-º!´è†Ð B €n-º!´è†Ð B €n-º!´è†Ð B €n-º!´è†Ð B €n-º!´¾x½^Ó'¾_ÿ¶Z_•п.@‡Âàý~ýÚ×ëUþ©ï©âómWÊÓ)¡ñéÁ—Ù°úúø¿ôûwÄUZB åý~O»õ1“fá4?-ÿuë›Oiö£ç$«¡d4~íLýµ3W+üºæB ¯i eN‚Ž- 5¹Õ¡ð—ÜjœÐ²kç¬_¹à‹¯×ÇoÏJâðÊgZÿ¯$,œ*\½h¾|šqö[²jŸéA€õ¨x¿ß_#¤âÊ%?‡ÐØs.H-uq¨T„ÀU§¯9L»„àiB  ‚­5¿~Db"´ê84Þ’Xç-€ó– –D×l¹^Ê -€Âãèègùþ¯Ñeí¨Ó„ÀU«W«—çå„À_W²d]…¹e°UNhÙ]ÉŒ V/C*B HíÊÙ¬-åßãäÖQB ÈëŽÄ:úmrë¡d4»ÀïJb­&Í¡øqQF9«¼¡ÌÒbº¬ßj®[qΉ4:tÓqÂE _ï÷Û’ø@Õ7;_Xrá_ù{J©õõ¯ ÜOCJhдiH9§@7„ÝZtChÐ ¡@7„ÝZtÊAž5ëZ¾ôÜŠ"´+?J¨õì>„@‘ZÃÙÙ÷ȰC„D¾ãûÕügáïîoÿý/±Þ!B `n?fަËêû—?!½J-€¿J\¯bg xéµCh Ãï®ýûš^¢kJhÙ5rßVz%|Òã¡äÕH\­–aZ6C®‘Ð2j3®¦D×*¡äÒ~\M‰®k‰ô•X£÷û=+gž…»f„År)Š.k4+pÎÜZ@ Ó.¾»¸ššåV¶èZ@|³ÄúaIªÈ*Vo¡*¹ Z€“j'~­á«·Ð‚Ÿ`±fÝ`B š À¢²§>j˜Ð‚M-) °ÆutK_ƒõ|§z[Æ ºwe‘_îÓEbµoV·´`]G1 slMõ›Ÿ -øâ'½Ï×ÈÔ'6«»Äj¿†Oß,´ ‚*€îëIUj¸Ð‚­´$¨"‘XKÕk¸Ð‚§ ªJ+IªÝZÃ…Ž’F|vhG—›>æŽ.´ài²*Y5swõvs1Г¦BâPaÚ^ºiV©$ ­£*æP…–U.Ì0kÈZçN ØÙ,EjÌ™lå‘.´~~!ƒÖµ8Ô(ìÈ,]hý\Œz°@ƾx›Eh o‚ v ;ÂTò\¡ï 0ØÚrƒä ­ŸøùY4È#d7}NÔž'oh=³5¡f™Œdv#ÿKÒˆ¨‰5d­»•¬¸Ô"·VÅëv²¯=X×Î*…ÀÝÆ…t‡ÜkÆÎ켡uGNÛHºcn0ªinåxbðÃô SÂô ŸXC¶ÐŠºQÚ“[kÈZ0˜L an%I¬!yh%©ÍPªÜÊ“XCÂÐ ¿G¯Oa!Ub Ckæh=®^ïÏU² Uó&æS‰ýÖåÍ ?,Ìc2†Öéz|÷%% ÖêànQskö‡$I¬!gh Çëñçˆæ¦jQ>ùþù×<µª˜­G ·Ò&Ö6´†µÜZ­Êãë«Õ¢Víÿ:ù¾_ ™Ì,Ì)®äëÃå]cø_%žÖ€òu˜¶nç#_ s®$@¡e+ë«Me`R‡ÖÇêTá×ÚpGuYÎ`䬔pŸÕ£ÃöÚò(¶ý2ßDhÍ5R)F$æùØšbi³bˆ«¡dÔ~t9G°Jhy5]X[„)˜dÇò&?©0[4ª´SB `eÈõñ@zí\|/®–„ÀcH<^û7Љ«-B‹øÌ rTIz-ß¼£ä^fõ³„к…Ë~xX¿ë;4n'½F7¾žá¡uÕ¡õv—/ª¯Ð…º«jø§ ­3*Õ&|²ÀÃÌ RÝ¡•HU¼º„Ö…YµSGKqßÿX¥Îüœ]ð ¡õ]Å R ФÀ*¡µé±›'ž¼Ê6‚Z+~57ý5½ô¼@rBë¬÷µ•^¢ HNhýÑH\­–Atcnâù¿_  m&Öhõ‰Ún&Ê>Òj<®¦š}†ÀcR´f‰µ: iͲ†\«Ì BHIGZ˸úUIΙº ¹€$2Ž´zO¬‘!Mº‘V˜Äú˜=qõõzõþUan0¡û–Z/|ðÕØúª—dÿÎÑl­>Wh…\v9UæOƒr;÷柞“Ø?ÆýüëÎÏ]/ÉV—µõÓd ­`¬¥éKn‘ÙlúaÙJ’£¤Çø:®ªR’ÕwVÒu*Å9­ð‰õ1;ËY¡sƒ\6KšýŠt_5ûZ“sÖðø¡•$±>bÿup‡ë­¦V»;ñ= ›|üÐuqÖuuŸ¯ lµšòㇹ5$kéÁC+Õ¾eÎ-sƒ\òZ­`"‡Væú—9· ˜Âkî“Z™ëCnÁ¾ºíâJ?sèÚ÷º?ݘ¡%±>²å–¹A®h­,/ˆo­„?0´$Ö”-«Ú €ò۳ѕçæb7“Ò¹.þŽ–rº$ËfnËÑFZ†YKI& Í Õj•N;ä 5Ò’X[VÖ ƒ­®àùq¥$[ë6%rEi}dÛ‹%vñ„„ö{‰'›É¡[˜Ë×€*NheÛsWÄÛVæÉ#ynÅ ­‘nk‹-S«K§·P’êï$Hh¥:Шƒ®¥Í­ ¡5J»# …Ü>æ¹ÃoìʯÎ( B+ÏÞªËvƒÇ=í‹Z#®„­…ŽØÕ=<ômyÚu÷¡ej芃-€º–+þ~ðŽ[¦ö=@û=¡ûÐâý;ì8š[ŸÅ)njVGOn…×wh9Ê>Í#ª*ãÂÖÇ×·VZº^’­ïIÛû…ZƉº^&m»ei+!NW’åÊI«?Q~«ï¡’|–^˰õ k¾Ð"¸©û^*Üÿ­Z%¿gyi{¬E­ÌûxÒÏ{›Ÿàç:>§•óÊ™Šz_B×Ü $Ôqhµ/íonaz°A² ཎ´šêktÕï a³¸•‘VeýÆ@ûziPß¡ej躷¡¹AH«ËÐ2óv[h_—¡@N7†V_×ÑÑ sƒÙíWNsK/À^ò.À¸âÆÐZ.ì?u=ÀÄ^Bæ!¹ÛGZËEõ—ŒÀ~ëóäž_—à»G§«˜îõ>]?ÈàŸÐj-ŒÀžñõÙ¬­Q ­nÖì¢3àVn. ÿ L¶|E•œ ã´é…?¯ ;ìzàgÓƒ‡‚ †I¸º`ÒúÙÍÅ«ôDìxt§UGƒÊME÷qÐ4îÆÐÚ‰#ç˜!„äž›¬ÞÅè¶j1rzqoh •A¸Ôsû‚¹©|]›*á6©Î !dÖÍŠ]ЇÜÊŠtChñGGÃı¨.!lº -}VE¶!Б.C €œ„]2Ú†œz ­ŽNÀ´Ìµø@_z ­‘m€<º-Ò2C -Ì Ýè8´h_d»Ýé8´À d#´¾x½^Œc]Ñ÷‚¹ü>ÍÅîÄs( Êkþøµû™ëYµõ ©Z±‘}3CÈèý~¯vß«¯¿þç‚Uù¡oHUù# P Ž ¶Å‚ý9\7íÄ·jŬ£ß©<+Øé¯Z~pTëÿôÏï{zR”Á–O_2õ÷ó0ørVŒYùóˆ0=h‚蜟7ÅZTN›¶‚–ëOI ¶\þŠ"„ÖT’Ývší3 ûý® ­0ƒ†ÇØb°ªµÜúzÉb¶¶$´¦Z«sí¼eÌrEËý~Ëeû‰8bŒ÷lñ•f‡|½êïÊTî¾:$NhM¹×xI¢C¡±)l5«W÷•·¸Ùoî»’tz¡¦PÝRrÛJïÌrEù]É3«‰uº '¾'[…ZCܹێ:×j-u}r(OÓŽZSÙ@¶Øp·Ó­ìâ@-aëZ& §2L ŽÌòC'ÖUª5µ¾iO ­AnýOªÄ‚Ÿ;ÔÛ\O¬Š§Ó:3´¹%±àË‹K:œéš‡=ƒ°¡5äέ´‰e†s®4™­çž~ä\]M{cOäÐbH–Xð+[ìÚÿÈéŸK›XCøÐJ8Øzì¹vÒ•0XFWan=–6±†ð¡5,r+v‡^þ\»ÀÌrÔ•ªRëaŒå«oäl×£ø¡5\X^¥/ N¸ãpù÷š *I¬¨ýÛ(Eh rkÖð$”¸ï’¥ê¹U˜XáÛ~ÌsW•?]»;i¯Ü2.ùi/SWÅ™‰ÕjvèÈøëC*Æú|¢xÁ$ ­iåpkž)A˜™5Ši¢¬vú·N¸^7áEd…’‡Æèëcü7¹þ ºstpså K®÷)ÏÎ#µªÿQ=š6礡5Ô»æç'º.ücäÄ0mËé¦GËœ.Έ+ ³,Wn9·nدH, ¹ÆÏh</^³ÌB¦W¬Î tvâ `$´þ±]ÃãQqîÚ\€ØLnÚ¹5ØÆf†zgz°ÈÖýÕ—Ÿ¸ïùÁ­/öosm”+°Ê™XñäÅû'YÜ AB àÇ·Hn]¥,º–„)x–1[š:½š^¢kJhy5»¶g³«¡þœÐ2j6®¦–O.]ÙŸ§E%Ï>'ƒåcóÞïw³1°Z¶ÌuXh‰tWSËr¦Í-Óƒ@½ßÆ;;Ñ•sªÐH‹D̦5›캣O>ä2Òú«|ß_YÍ}òÌ ­ bWèKÂÄúH’[B«‚Õ†á oð¼´‰õ‘!·„ÖäV³Ì†—¶}…Ï-¡UÙòÚÂõ¤­}Äl¡uÆþÄê’ÌšÜ*ùÄà–x=Ð:¬¤œ8ËÅÃÌF"±fO ­–knî4­Ü V )k5·¬=øÅêÎ.l«ë™V ƒ|]†&­åƒZ_\o[Kîj`?76i»£_ñ:囄©ä¦âÙp«=ruñ6‹ÐzN¼Ú¿åȯD°kބ֣äVk‚µç´´¬<„VMG¯†×QÂišO¹HgB è›aÖ!½ç–ЪìP…ÐØZé 4;ë¨0½Ðªo¿9ilPQ˜¾øI]÷BBë§—z¾r7ñ916—К«u ²ú=[›ÌB/¬ˆñ×õ˜ù¬°0.±ÕJ,à'¬#´þª² Ç/Y^ÚÞi¦˜®HÎôàö׃§f¡ B ‘Þ …ПÞ{Þt:©àœüà5?ä«gi\µ3jét@Ó,¡pÉxyðÔò íèú²#¡uݘóhpÂmY¤ ƒÐ8oç ¨ÜºƒÐ8¯Ódê´ØƒÐ‚3„Ð2¡ô¤Ç!BËeîîàÌ}Zð´i7ÑrwÆE9½»z -˜»õ.ãÙ­‹-ù>½£z -xÔ˜ˆK,ŒqW&\]e«†×ªÞB ž¶|lÍ’ëÔr‡æÌ­ñ¿«Xº­ …žnSÉ)ñ´ ¶‹ÇhíìÁ‹Ý` ß*É´¨FZÐ #°Þí¬Þ”p¼µTe&´à‹f¯ `Û9Ù”6 ¹U*÷iÁº¾b Í~‡¾jQŒ´ oºEb›Õp¡›~•§ÏWÓ ö' Ÿ¯NWj¸Ð‚&*b«UÃ…üŒ "¶;j¸Ð‚G ªlŸ¬îî.´à÷UxÉwqÅ?_hÁ£ÆÓòÉ{±0öוȼ¯oú«Ý¤ t Ù;©w Öxb5^¼-FZuÌNçt—]ZçÉÔéÀ¥;B  ‚¾âªßk­=@7Œ´ˆlõpòÜqù‘i_GÜ=ò˜Ì„a­žcx½^'º¼~çR`©‹'jn1=HL[gÅ?¯ÜB=öÐ#-*ɤ£ã­¯o6{’´Œ´«V§VÒ?J,zÑõÜà ´ˆ§|½ÎêIÓi/Zð…(jŠÝ‘œÐ"”ŸLÓ™ü ›ýŠ~³_h‘ZÅŽ¯ß^€<$½Ðz  æ(¡—è7ŸgP{Nï× ~-¨ ë^ k²Z@%c˜5-¸Âa~ ì…T„\Õû¡k§löra†YƒÐúußâ&‘Û8B N Ö^€aÖ ´æh³ŒÑŒ33ØÚo³-¸Dìµ#^]Q˜Š*´à ýc;ÂtÇÕ…¬¥B‹¼tvñ„ì¦Ï™nŠHU]hÍדûýÚëõ*ïø"õ]›î¹5ÄM¬AhRI+]}ÏØÔ¿Û¹‚q¹5 œXƒÐ"¶eçõy%^Kf[ !ë¹Ð"¦÷ûýi±ãtßøµZrÈ¡wr+ü_ýÒðÈàõRÕûvh!¢H«{bðÃH‹¢6`ö…vLeH¬Ahñ$œ$L’XƒÐBšåVìèÊ“XƒÐ¢šuß!sk–ÇákZ@`±sköçdH¬Ah±7?|„É­œ‰5- ƒ`§¸fS‚ykZ@1¦ žÄšZ@ËÜê(º–¥M˜XƒÐRYN¦u]ËæL¬Ah -{üfsku€•6±†aøï×øq=åñ•Öž`tµJhyµ]âj‡Ð²ÛŠ®é¿>`uŠR\Í-€aX‹®[t².Mb- -€¿Æœ¸5½dÕiB `EIz­¾¿äÍû¿Ès…š½b»ºvYwld=ðQFZEj-%¨®ZgÞ¡,¢ê2=@7,ã@7„ÝZtChÐ ¡@7„ÝZtChÐ ¡@7„ݰö ÁÅ%Øw´+|öÕëõÚzŒäÅ’l}áøs©VãZ@;¿:½:ûì«ß³ós×K2}Ãô³[?A®ˆ2ØêëwÞ¼'…ã°ýAÒ‰’ì?+¹â“”;âœÀ?fI³ ÷Æ×LJ•U#¡¤v½ë¯'¾'an - »Õ¹áH$ü0·†d'·„Àç‹' -€¦^sŸ„Ð’ª;«v%<]û^÷§»#´†¡½3CË«ð[+áO- £v`§$«7~µSòŸ°"Ù¹.þŽ ·Ó%Y~0ÛÒMSFZMÛZ#çËH ˆlkDò|¥$[Kñ&rií÷õOFÚ¡[˜Ë×€Jhô$yn - ©YïÿÃy¶£?mJpJhô'mn -€¿s+¿:£üý1-€?Ò_:"´Ö¾Ôîú¶+úæ%×ÀžÙ÷Í ¯ sÒ¾yjË}¥äÐq‡Ÿ!Èüê¡V64   T&ÐFÀ X[à\€ðA`àƒ ä‚ }à ¨µ 4Vpt‚óà ¸nƒ»`<B0 ^x ÂBdˆÉ@J:¤AlÈr€Ü o( …¢¡$(Ê…vBEP)TÕAMÐ/Ð9è t„BãÐ ô7ôF`L‡` XfÃØö…×ÃÑp*œçÃ{á ¸> wÀWàÛð0,„_Âs@ˆQFt6ÂE<`$  [‘B¤©GZ‘n¤¹‡‘Yä ƒ¢¡˜(]”%Êå‡â£RQ[QŨ*Ô Tªu5Ž¡>£Éhy´ÚÍC¢£ÑYèt9ºÝ޾†FO¢ßa0†…1Ã8c‚0q˜Í˜bÌaLæ2f3™Ãb±2X¬Ö†MÇ`+±'±—°CØIì{§„3Â9â‚qI¸<\9®w7„›Â-àÅñêx ¼>¿ _‚oÀwãïà'ñ  ‹`Eð%Äv*­„k„1Â"‘¨B4'zc‰Û‰ÄSÄÄq╤Mâ’BH¤½¤ã¤Ë¤‡¤7d2YƒlK&§“÷’›ÈWÉOÉïÅhbzb<±±mbÕbbCb¯(xŠ:…CÙ@É¡”SÎPîPfÅñââ\ñ0ñ­âÕâçÄGÅç$h†‰ÅÍ7%¦©XªÕAͧ£^¥NК*KãÓvÒh×h“t EçÑãèEôŸét‘$UÒXÒ_2[²Zò‚¤04¥4Õ4m4}~Æqæî‹u/&_¦¼\˜-øSâÏšWš¯ÎþeûW¿(P4ùZðzéïâ72oŽ¿5~Û3ç9÷ô]â»…ùÂ÷2ïO|`èûðqj!k»XñIëS÷g×ÏcK‰KKÿB,¾±^¿ cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿ«1Í pHYsdd–ÅÝtIMEâ ë QrHIDATxÚíOˆ#Kžßó06lŒz¯y›x ¾˜—Ìz¨aßÚFÃÒÔ€O¢ºŽëjr Œé·‡4T³G•Þóa`ªk OjÏ”/ªÃÊ ƒ»TÝL‚ .ƈdV‹½ˆí½]ßþuTD¦2%•”©ü÷ý ó:3RʈP)¿úÅ/~ñ ë©(í¶a4²¬lîü¼ûÁ|þü:F£v{ŸÒ¦íÏê³Ë–äV©O<‹6—³ßÕ†iÅñ<-Nňj»==¿Žòˆª´ßóŠnGÉ õ‰gÑærö»ÚPT+N\TÏ 9Ç£çûòçù¾X8JÃP½Wƒ@›÷™Ïaù~¯†ú®úÝAà8úš¾›ïK^m¶IÅEU·5 {=ÕRõúÁGËmYî×r]ò^iqôÎò~i¿ê•´ÃóPƒy¯ä÷ªv¼.Zßú¯ût•¨šŸ¨þÄÕkÍ;&} «ú%Ÿ¸>‹þ%É6PT+NTT]·Óq]Ë’Û²<϶}¯jµ:ÇiµÌGU½W®Ú¶ãȹyŸÑÈqPŽ÷ª»šïÆ{u(\·Õj·áœÀo“\Õué¶K[}ß²tKçsÔÞé´Z®‹G>Þ–x¿Ìº¢ï…¤˜wÖŸŸ´_õ ¯qÝv÷•{‰%½µÉ‘m÷zñúÀº¯ûtå,ú‰êO\®Fï¸ü‰¯ê—Ü#佃moãÊ!Q(ª'*ª2˜Sex¼ðoZ–]9‹~¢úÇÕø—¿éýÒõõzŽƒ¿ÿ6އ¢Zq¢¢*—UyHðÈÈ+d2+úàözê°dâ÷ÑÓ_ó¹<ÜëDU^ ‰Q5åÈó”m§kUm‹Ð¶GŸéõĆ‚DèÁi´-Ëý2늾7~gM\TåªW²ô÷Ú6¬AÏÃB´¾ÍZ¼îÓÕµéO4*ªñ;Æ?…èçí—º‡œ+¹%»BQ­8IUZTã¯IU}5é}fLÐG_UžÂ°,ªŽzpã>U=”m?’Á Ó±,yàãmYîWTNÌ÷.ßY±^TÓß+r*Ò­ÏlWz‹×}ºúSÑŸhTTãwÜVTáà š ÕŠ³‰¨jkÃïeKU]Õ–ª¾®†¸2Ð\o©¢†èðSKÿõ}ÕXfz e0€õoËr¿Ìº¢ïßY³‰¥šö^ñFÊÀ=ZŸ\_×âuŸ®LF?Ñ4KUbèïyêNd7(ªgQÅ+¶T» ËJùPm;ͧªïƒÇ^?×U^?óÝqQU9®/‹*î}w´íhƒøþd¨×“©ñ÷ÅÛ²Ü/³®è{ãwÖ¬Õô÷ÂJUöc´>¹º®Åë>]S6Õ'ºìS5︨ʙò³’Ý ¨VœMDUw2çŽÇ3Ô8ëtäuê*f…ã÷ÁcjÛVSLñwcXªgÿñèË|¶”ÇqÏC]˜!OUi j³mXg˜Q‡¼¨Ùÿx[¢ýŠÖ}oüÎÕNÕŽ$ñI{¯ôGÊâõu-^÷é¢UñOTâʺ7︨âçÇð G}Âd(ª ‘˜Ú¢ÄPZÏ`H‹«ó¹ë.[*Ê÷§_}·zô=¨i¹\·dU4$ÞgÚ¾8“G=©-Ñ~-·^½7éÎiíߤU›Ô·¾Åë?ݤO4ÞâÕŸÙ7ÕÆ£†ÿð.?šÙ-~Ý2µ%›W¯Gd=ü“’ÏáF–eâ5ezìËÔ–lZ\½‘õðOJ!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2dkQÅ¢Æå€ñxiH24×eFqBHØZT]×qÂiÎÌ¥ñRÛv]¤Dsd‚BêË–¢Š<å’8Âuµ\ÆKu¶HÈlô÷w?18=õ!¤‚¼ycjÙÖ¢ª×,c³°´Ò0TY–Eõ_ü¿õ¿òOTC~ñ‹¢?˜}ñÕWGGE·ýf¿Ùïì8:Ò’ú£ýðÖ¢ªó¶›)!’K!®Ëéo_ß¿]ÝÕ&iG§&À~7‹¦öûÅ‹­EuygœU¥I[ŠQT›ûÝ,šÚïDu4’ýp¢ò¹\Š)ªä—¢Ú,ØïfÑÔ~ï ª²Ó9ŽÌM–KÓgý)ªÍ‚ýnMí÷¢Š`©^OöÏ‘˜TßÇ¿ÑRìï8z"V9EµQ°ßÍ¢©ýÞIT±ù¶Svªìˆ-Ŧhšèû¿þío[ôP¾¿~?¤:Â~7‹¦öûë¯÷»–©bû±å½“K—iß6ó—ŒR_>ï?\XåUBHÍ ¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%‰Ìfcòl‹¢ÿn¤x(ª5Dq8üø™÷)¼}ûsR8oßê¿ÈÇ'†C uu¡¨V–ÅB:S:ß¼)Z$H~¼y£ä÷Çïî(¸å„¢Z &“ëkHç‡û´1M+ФSìOÙû÷½žØ¶³YÑßS(ª¥f6{½ç?´ò°/%ãð1,5Úò³wÙ<÷oÿÝwø»__óo[ÕR²XÜÝ}ü¸Î"KCAyŒ@Ñ-'ya °ïú ¾!xíx<™Ýþæ@Q-“ —øÃošØ0œ¼ &“‰Ø¸ïß÷Ý:‰Å·èÃüüòû“'Õ’6Ðÿî;iÑ­#Õqˆúèõ–˜“~¦‡CZ°ÙCQ-˜´þÛ·>ÜÝÑ¢ Û‡$Ó›«|³ß}‡©.za³‚¢ZÉýŸÿ¼×»¾¦ý@²g<Æx¯—î‹Uö+ÇF»@QÝ;èøÀ>)±aWY°oßÂ~½»£ýú\(ª{³¶ËÓ è‡è“b€.‚U]¦ÅñÓfPT÷Äp¸<èâ@Ÿ”‹ÉdµýJOÿ&PTsg±ˆODq OÊ&¹®¯1Å•<µõñ#Í4(ª¹2›E½§è“ê1™`‚+)zº×ésCQÍñ¸×3¿€>ðëGª Âÿ>|Xvcqä…¢š áù»þöíÇ´OI]˜Í®¯MƒÁœ# á@QÍœÅâúÚü-ûv8,ºM„äAz4K³'³(ª2›}üøf`¢pPDêNZÜ5°š9™EQ͈ÉäÃó+õáˆ!Ò$ÒR5or–¢šwwæ—éÍzPISIŸÌjŽ¿•¢º#Ñ ~xP)¨„$Ofaʶþ.ŠêÖ ¨ßô$½wWt›)˜ÌŠÛ­2•UtËòƒ¢ºêxP?pJŠ4`·Æãdé@ÇuÕg3Ç=¨Mñ² ‹±/G ÔÍÛJQ}øRD=¨××uü¥%$?d*+‚U§lÕ ùƒúÆü0¨ŸíIö¶"ƒkÑ-ÛŠêŒÇQj¯G*!Y0™$y[«½&‹¢º†áÐü“ÓƒJHö$`U5E5•ø€Ÿ1¨„ä æ,’¼­U›È¢¨&Â?!E‘´&«JÒú,QÏ]ײlÛ÷ו‡a»­Ž}¿ý…øûÊ)ªðR<È%÷¶VCZŸ%ª®ë8a8XVT ãåA UW;vÛûL\BË&ªðR.’– ”}±ë3Du>·¬ À‘ûHz¹çYhQm·ƒä;þû¿üþûÑóy‘ü„”•òKkj%ûæ›Eõñ…_^9ØöêrÏÓ¢jY¾ßëùþ²hþ»·ß|Ó~B„¹8à'¤ü”YZµ“³Ý~ñbcQíõ”PjM+×¢ ;Ö¶ÛmÇiµâ²YüðŸ~Bª’bÇïʕ¢åÃ-”QQM*×eaèyb£v:¦}û¹òBE5>àg–)BªBRY4PtËž%ª£Q«¥ŽLQM*7‡ÿúuV¬¦"EÕTîtJH)§´>CTƒÀ²ÄæŒJfR¹i½ª@ªr‰êÇjàÀ¤(„T™¤EoÞçi}VH•m÷z𒪈Tß—ãåq—€øR;Ä*/PT ø ©ÑìWÅ™JÏÕ hµÚmL;©7ËQ¼ÿ_¬O•ö)!õC¤f^Q%…>¥• ÕPyá³ÿ„:Rä ×þBH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!bˆjš™ù}? s¯œ¢J©_DÁû½žãèD«¶¿àQT !u㋨bd<Õ‰V;ü3ñST !uÃþçí¹rŠ*!¤fDDµa•ST !5#2Qå=aÛñ4}¹TNQ%„ÔŒ”*äF¥O•BžKjœ*.ä^9E•R3RDi§óß2š¢J©†¨bã }ª„ò|¸L•B2dIT±õIþ T¿TNQ%„ÔŒˆ¨¶-ƒÛÎߣJQ%„ÔHœj«åy¤ C×mµRE!ÏÅU$TјP…Bž!ª¾o.MEƪÜ+§¨Bj†!ªó¹ãôzräy¦Õš[åUBH͈$Tqk‰\+§¨BjFÄR%kåUBHÍ`ð?!„dH,N•ùT !Uçöö榸Ú#>UËò öP9E•’)··/98(®†¨zžëî¹rŠ*!dno»ÝÓÓËK]òò3ŵÉÕÁ`™©"•ST ![2¼üÂñ±.?xäøx:-ª]ŸªëzÞ>Öü?UNQ%„lÈtzsÓíšòùÒ èÖi¾ˆªeí7BõKåUBÈ¿z¥äSÛ ÇÇ/_¾~}zÚíÞÞÝB Cª!¥ãööê}®%õåK- ÷÷E·3 Š*!¤DxÞë×"ž¯^éRؤðœzÞåeqÞÒ͈„T™Qªð¯æ-yUBšÎý=<¥ê\Ijt ?–Ó*M"’OÕqZ-ˆ)²©v:ø¯ïçZ9E•ÆâybF‡ô§§b¥w»e·I“‰Xª¶­SÏç8FI®•ST i Ó)bJõ¹–Ô—/uœéí#Ún­"‘àsi*. * ×Ê)ª„4€ËK={¯³ÛU1¦åš½ß•ˆ¥Új©(U,Y Ãu–ê|îºØÏ*ê$H* ä\EŠêì‘¢ê&¤Þ`îÞ¼›6©–O¬Ð¯æ5‘Ùϳ,LR!¯ªï?^°VûT]×qÂp0°,S—Ke ,¡òEuüˆ½{7Ê…–Ýèvõ*'¥lÒׯ=¯:NÛ © Ã^Ïóz=lR=Ÿ¯Þªz>·,±l]Wg X.…TC¬*/PT‡ÃÉÿŽÇ‡‡ý¾”õû‡‡‹…:¾»+ªm„T±HÍ5Nž§mRí?½¿¿ºª¿˜*RCªÖ§þƒ%+GØÚzuiÔ_«øæïÍ\ûXeBTÕñÙÙá¡-Zj‡Ã³3õ bBˆÌÒLJôb“Êܽ¼_wÄtÔZöR¥ÓþÙöúä*½žJ-¤i¥É¢Z†‰ªÅbõþêJY¤å_ã´_R—©JHÕ*F£VKiùL.­š¨šL&ÊN…¨^_Ëq²«R«ŽÇc: H¹Aä¨9¿jHO±÷ðÐt‹4Q5ëÒ@Ø•X³¦d&—VYT“µ#`«`8ì÷W@Š6¨>3…RÞ›¥úÕ77ÇÇb‘rh¿ †¨Â²Ôl’°Ú¶{=qHè•ïãßx)¨Ÿ¨jà•]vÌfÉ®‚Ãó39û}%ÀôÎ’¬€õiŠ_·«WÓëW%ÏÒCT‘à¹lÉôªÅNYª`϶۶­Sb⥠΢EÉãd¢cÎÏ•«¢šä*ÐR‹÷)žLè@ iˆxš3ìɃ÷äÀ{½šéø¸I³ôû`ÇÔóùh´ì&H.M¨¼†¢šÄÝϸýªbaµ¨¢T/K0¥VIt¿¯ï¦m]¸T}ÚržÍÔuR> ‹ú ‰|MÑP$̹+´ïÓÌ.ª_kʧÞMTét¬h•²>Uˆ¨A§ƒ¡?rU­›ûϤò†ˆj2þk§€)µÚ+«DõîN¿âìL;ÌRe c:Í”hÙ­Û=<üÅ/d 'u ìøøð)ÅÝÆc<¼ß>"vÔ!ë·ßÊCl–þøÇ(•{ Tb”~ýµˆÚ#¥_Ry-ú!;_¢ôÇ?V¥‡‡f©LŒ ÅjóŒÃÃo¿Õ¥ã±.ÕmS¥É-–Òxï¢-î÷ÏÿZ—ªÞ™ýøñåµñ~¨¶©Ò?ù“o¿U½C̳êJ¥møé[,’&ƒ¢†$[ŸúµÊR}ýÚ´>!Ýô„îCTçs$ü=2`©ê*o´¨&3›©ø3TËtDEÕŒFxx€¥óË_þ§ÿ$UTŒÔC£ÃCyˆ£bDQ5ûñ|QöãÛoõÏ™îÇOºü÷øÙÏþã”;`2›‰MjÛI¢ ñ4x:¥x–CT}ßRÛÎ_ð(ª›[Æô´J4áßüÍ/~ñW¥l ~µe´™¨Ê¤E5&ªËýHÕo¾Ù\TücÉmÒÉD†øø{Èâpˆ~`èÍÍyDìMÓDÊÉšÔ9WNQÝû{ ÖÍü>IƒÅûûä!$VÏë~F—ÊùÍÍí­é]ÃêPt«Él¦'*udG²[—ÊOŸpxxt$G¦#èèȨÒ~ÿâ‚¡zå#%õrL­N§’IåÕµL§:ï–DST£;ùˆxF…’T‡ÙLImÔç®DõúÚœÈT¡zæ @R4K©ÿG¥þÛCåÕµ`1 B‹êö>iU6 íÂJ>eÕÂU "IîîñQ,+Rÿí¡rŠj"æÚ—‡T„c3žhàVPÞU¬äSVíÑ‘J ´XÐ9P‘Uû°N#•ST—¸º’ÀsEÌå%guÉ*îî..äÈŒ„6]dDfÿóÝæ/¡rŠjÏÓAÝ´JÉ6ÌfggÊ€•|jâL{eIÞÄ|ª®»O™£¨FÑk´Í¼•„lÇù¹r˜ B|Ç\y’šP%ß}T¿TÞxQE¨”Ú_^b.¿ »øýG€r ˜ö+}®y°ãÚÿ+o°¨N§——b™šYÓõŠmB²Doji&ïÑ+òHvDDËS7ߣ*ƒÊ+ªf ÔéiÑ­!Ía±õâs!×ieE$øß²<ƒ=TÞXQNõÊ'zOI1\\¨8Wļ*û•þÖ]‰,SÕMï©òF‰êå¥i“¾~„{ûr€,hÊÐïÑjÝCTƒM²ýgZycDõöV–šÒ*%eÄ\æŠÅ¯r¼Xp mˆøT]×ó6I.YåÕéTg¿|ýºèÖ²š£#å0íW²9_DÕJ`•7BTõn@fø!eEÙ¬æâ×wïTÌ+YCªrg:Å:©ãcFŸ’j]üÊY›òET‹·:‹ª9uyÉøSReà0³¸2B`OÃÿB*¯©¨N§§§¯^qfŸÔåX,ŽŽNNŠnM¹¡¨fÌÃC·+iQöéKÈ~AæVµàõîn8¤Íº E5SîïU–þè†&„Ô-¤Ø‡‹­Ëpö?SÄJe–)Rw°[– ¾Ò›ÀCT½%öPyíD“R¯^1tŠÔ,PQ¬¾¢¬*8üÏäæ×gœ "Íœ¼Z,èe¥¨îÈÍ ¼¨¯^Ñ6%M» (ßêpxtÔô-\¾ˆê>ý%T^qQ½¿× P9×OȧO''GGM·U¹¢jôL?½¨„`ëÑ‘Z…5ŸŸ7ÓÏJQÝI5}|L/*!‚ö©bòª™ŽŠêNxÞímÑm ¤|˜Ù‹ëë&¹(ªÏiüÔOÈzÆcsÛ–óó¢Û³?(ª3ª$~ ì'dSpÕ,GEuCÔÏ™~Bž öPvêx|ttwWt‹ò†¢º!··"¨ô¢²ÈPÿ Z(ªs|üêþ„lËl¦®`¿ÖuòŠ¢º‚ÛÛÓS¯:e,*!» ®0yU× WÕÔ´çú ÉšhªëºY¬ÕhúåÜ[ŠlA䪚°BÚëzÙ¬ÕÔ¤¶”æ´!yrrR·É«g‰ê|eÛ¾¿ª<þ*ßo!þ¾²Šê§O§§L4MHþÌf''zÏÖ‹‹:Èë³DÕu' ËŠŠa´<þªN§Ý–´×q -—¨šÃüé´Û-º=„43[€Ø*ó QÏ-+pä>’V¾üªv{0H¾ã7onßR¤ÀbÿSäš*®„4d ÐŽ€ªY¬žÕ² Eõñ…_^9ØvZùò«,Ë÷{=ߟÏãw,‡¥ª§¥˜jšâÕ>­˜¼ªîÊ«gXª½žJe­…s¹<þ*X®¶Ýn;N«%¬Qy)DU/?e?BÊ@µS]?CT=/YT£åñW…¡ç‰Úé˜öíçÊK!ªÊi)BÊ&¯”ÍZÅÉ«gˆêhÔj©#ST£åi¯Z>/VTõ@ÿááàÀܸRÎÏ«—áꢖ%6§¶F—Ëã¯T U¹D•+¥);“‰™êº*g…TÙv¯/©ŠAõ}ù7Z=ƒ”Š/µóH¬òEõö–Ã}BÊÎp¨ö¹ê÷Žª±çÕ³D5Z­vÓNêÍr-¿ Á8wœøü±>Uù © ÈP•É«g.SÏG£øþryüUa8%Ég9&ª!eé­¯¯åx2)w®®ý'„Tm¥"ÕµØ2BQ%„Tˆñøð°ÜŽŠ*!¤B rUÙ©ýþÙYù¢X)ª„J‚íYtªëò@Q%„T3½õx\žp+Š*!¤¢h!Eªë²øY)ª„Š›µ<™X)ª„Š3™œŸëT×EË+E•RêZe ( Š*!¤6ôûÅgµ¢¨BjDñ;PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢JV£Ñ|^t+šÖö0°èVí ¨’T|¿Õ²>ãº"NÖß•0l·«Øö èt,«ÕR÷É› h·-˶ñÿ XÿêjþlÔŠj-yxPGÓéíÉ¥Ó©~×ý½¾Ç``Y½ŽÂÐq<GÛ‹*¤b3QUÛbÌfã±:Ö{e𥓉JG¼XèÒ¬ÛnÛ®†Aà8®»¾íã-Ñ»×·ÛŽ¥ëÚöºñoû7!ù@Q­%··ê¨Û}ùDri·«ßu|¬ïaÛ"F`0hµð¯¦ ð<ßWÔÁÀóýZóLð<ØŒ›‰ªJ3‡»Þ"Ã,=;;o£ˆªïÛöè3½žúñgKù\åG„ìŠ*I¯9m·ñ Ë+ƒÎNG„i0Ùqyh£g&ûÕÍÛ¾Iëá·ÜßtÐ|®3Z-™n€ í£m”–¡Wí'PNQ-Š*I!:Ù#2a T¡1/®^ió,z¿ý‰ê¦mǰy}ë7™õÏŽ¨•­¤Ã{X£ñkKÕqä°Âñ/Eµ8(ª$L}ˆ_þD™*ÁßëÉ<ŸCºz=ÛÆu>‡¿/z½ß>Eu³¶ã|]ëũȿå¨[‰8,nU'¦ `µÆÛ(¢‰3é¯ëªÞRT‹‚¢JRA ”m;‚¡t= bDÿêWŽcÛ˜eVóçú,~·}ÿoÒv ­k½ƒ)öÑò @à»ÿj!„¯6v¼ÒùÁÛKœ¢Z…ŠêÿÛßü¦è ª5ˆÁdÒ‚I±Úp×p¦{=+®ß›µ}óÖoÏóû¶Ñ%¶½žþI2Û¨û!ýÍûSÍ·ßõ૯~ó›ÂDõEðý÷EEÐÔU0ì÷vH´‚ ï«DSÿÞ/^üðEuÏ4õËÆ~o&¯öé:)K¿« Eµšúec¿›ESû½QϱH.iøBQmìw³hj¿÷ ª®ë8aˆ¸ºøGLQmìw³hj¿sUdÚ‘9@,²‹^û×?ýçÿðG«þ÷“îÏþ¼ÿûê/šÓWö›ýnÂÿ¾þ_¢b/‚ÿçGŸ®®rU½Bd0ˆg‡üÃ~0øýïG„RA~÷;SË>}ÊUTu|]rš B©¹J^GCQ%„4ƒœ‡ÿ’w¢Ji ¹J’BÈr»ý®ý&„¢ÈÙ~´md×A*‹ê-´#„瓳¨"Õ.rîÐN%„4ƒÜ=HÑÌ|5„&Âé#BÉŠ*!„dE•B2¤QMÏ]U?Òú²/¦ëš9ÞëÃê¿q}CìÒû]O÷»Ùuú­¾çuíwœ0l· ÕôÜUõ#­¯¶íºØs¿ûußo€øåºŠjZ¿=Ïq‚ïzÊËêï9¶P” ·ëM`›ðDuU‘ÖW¬0 _â[¹¿~Ë5„ØÕSTÓû­Äf4ªãø,­ßÍZþ#E"ª«rWÕ´¾†¡²Wê)ª«þÆ®ëyu}ÄÒú-åóùòV„õ ýïÝj ø·Ý®»%à›]ÀݤÜUëúŠéë8Lï÷`à8õµ[ÒúíûØv ÉE·rýV®ŒMê9w§ QmRîªÕ}ÅÔE%5½ßaØja˜XWQMë7†°ÔæóN§Ž=OÿžãÇd0ðýV«ŽnäO¢ásrW¥÷SõÝr"­ß˜®‘Á¿m{^ýl¶´~k'O=¿óiýö}å ÀTUѭ܉j“œ×é}­ë¬ÿê~FžWgQMïw½E5­ßM•êÒÑ&宊÷Õ÷ñ/~·õv E·qýVÔ÷ç4­ßRþéS=‡ÿiý†Øª¨øÒëOa¢Ú¤ÜUñ¾J0‘_(Šnãþú­¨¯¨¦õåŽc?RÏôBiýîõd¢ª®ýŽS˜¨6+wU“úÊ~§÷åõ•¬îwÖ»ßËÔÒJ"„¢ ¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dHa¢†!„ÔŒEõ_þßÿpÿßþMÑÀþùê«££¢ÛÀ~³ßìw>ü³öÃ…‰ê‹àû{üˆ]\¨£ÙLåK»=Õï"a¿›ESûýâEÃEu29<ì÷¥¬ß?7*§¨îÒd˲¿*ûÙ³'@Hql!ªA`Yó9Ž<¯Ý†%jYA€s÷‘èYüjôNÿþ/¿ÿ~ô„Ü“<Ÿ»»£#ˆûUse!û! µ’}óÍ–j«5àßv2ùxƒ/w l;z¿½Ï¿{ûÍ7í'DzÉn)§ìW¦$õa:½}âáA•ÞÞv9þL·[TÛ|_+Ù‹[ùT-«Ý¶ívÖe¯{@@£gñ«ÑûpøŸ=:#²`©„-ã1­VRF”L^]éRɃƒ—h¡ìv_>q{›Tz|\tÀV>UÇétßoµ0ù$NÙŒžÅ¯Æ*§¨æ"Z•”r"‹ÍÕ•¶(ïïUéñ±–DýZS(׉êÍM DÕ÷Õ0SUKü@6£gñ«±Ê)ª¹¢$ÕÜ9k6£ÍJòEÛ™¯_ëRS>µ$š¥Zj“Eõêêø ýÚéb}y kW—É¢·=£Wñi¬øy¤rŠê^¸»;9QççGG”U’ Ýîééññë×Q;óÕ«$ë3YT=ïÕ«$¡—ÀtZt·aËÙ5Ÿï8ø×¶Z5ŸK,jôlùܨœ¢ºg0y¥²`QZɦÀô<$P—¿4И<¤—áÿÕUtš©ŽlåSíõd¢Ê¶E\ƒ Õ’‰«å³ås£rŠêžA𕚼ê÷õ1! LÝÜ@OOui²ßR¦’âÖçÕ•HgÑ=)Š-—©JT–>ŸÏG#=[>ªœ¢Z ¾âòV‚ $meN§¦õ©_“\zu%¾ÌjÓó‚kÿÊd¢÷uON˜š¥iL§Î/[ŸÉCz ÞonÊ2Tn(ªe±P“WØÂ…K[ëÎý½ÌÊë’´!ýÁÂè!¢õö}æEµñ ¶ÊÖ:›Ñf­Óé驞‘×åª$:ùDv…¢J ›™(ªuãá!yHÏá|>PT‰ÁÑÑɉ-ggŒ ¨"˜»ýÚ´>IúêÕé)¦•Šn_ý¡¨ƒÙLŘ)°Iu0cDµG6iÑ-kU’È»w:s@¿O—@™¹¿×ò™¼n‰ìŠ*Id6SYY'“ÃC¦c)#ÓéÕ–y¾|ys£Ê°jþàÀó®®;ZU²L^©t,Ã!— ”…ÓSm“ªàQ¥˜ E•¬a<¾¸è€ÅBOd‘¢¹¼LÊäDЇ¢J6i¯µS€ËöËý=†úz ÔzÝ.=§eƒ¢J6æîîüœi¯÷ÏÃÃå¥J]b&9áz§rBQ%[0ëý[™ö:o`“êÕOE·†¬ƒ¢J¶`<>9QSVGGtd¹ÖIìÔÓSs'RV(ªd'9@e»"Ù€”ÐQ-«H±ÇYýª@Q%;1©É«~ŸéXvåæF‡ïë@)²9³Ùõõwßa·‘¢h°¨¾}ûñ#‡­YrrÂt,»âyIѧdDNþ…â<ýÕáP>ú^2 Xy¥¢XÇãwïøƒµ)Ó©žÇ—I©×¯//9·¿9“ÉÇZN…âžëÆŠêû÷úãûöúš3Ø»£SžŸë´××t®®AÊ Þïv™Žos §oßFåô»ï®¯‹üÖ5VT‹ëkóñæÍ‡\‚™ سUM^áX-r%&Ó©ê3Pêù”QN…ÆŠª0ø`þQÞ¿W“.dt A¬ÂRyYïîŠÿ— ÿõkÎíoÎx¼,§ïß—AN…†‹*˜Í¢¢7o8•ˆbUÇz«Á¦rsãyZ>%£T·KAÝ”»»Þ¼‰Êi¯7–Ëy—(ªAÐn[.u:a˜cå¥Ua84½¬øS1ï}6¨/üÝN{=—íAÈÈ©X¦——ªl:Õ+ùÉjª!§B‚¨Îç­–çõzíö|cå%U0›EÿpœÀÊ’»»“5@ ì&ýh™R¯_ÝšjQ%9DÕ÷çÓ§Ñ¨ÝÆ™mç'|eU°X ‡Q '°²“WÊ)0ŸŸ×5¨ÍÜÎDMHy­ÓÍ@šô^/*¦˜N.ÿq‚¨ÂFÕ¢ê8ÍU!>õÝwœÀÊŽÅ¢ßWH]¿-ì›RÈÆO9ÝŒ»»å¨ÓjÈ© ªahY£‘ˆªï[Ö|ž[å¥UÀ ¬}`îßZ‡à+J©Yýƒƒ¢[S-&“ëëèÌFÕäTHœ¨‚”Úv«å8­–ïçXy©EU¸»ãVžL&êóÄþ­j=‹_Þç§ÿxt¤£ ò̇µ/&“¸;Zë=ØÙ7È ¢Xñ8çWÓý½¹Ÿ)&¤®®(¨št»Tæó›b™3bꫯ|ª«'ªß`A,•ʹ¼éW̳øÕèê'ªÂÝ]Ü5ÏÀ«ìÀž êÓDðU>²zu…]MÍ€BNH ëíÒ&º¾Öˆ*|ª¾ŸîSE«NDzx!Ô–-4z¿½S†ÿqðèG¿xp4k”?GG:vVŸíÃC·{p@ÿiÚ¥›’0ü‡ø™Äßây–%ûN‚éy¦lFÏâWc•×XT…å}tÞ¼yÿ_@Êëî Û•J{ÌççYÜu:ÕSRÇÇÍÕÙl<¾¾†.'9iº]ºš-–©bÊIŽD&G£VKŸGÏâWc•×^T^%}))¯Ùqv¦»~¢ø7/u±‘tïÇ÷ï—×<Å¿·Üo,-DU‹£a–$^U=‹_UÞQ¼J ‚¦¼föÂ’ ÁçïߊÔƒ=u{{yÙ„ ©ÉDlÑ÷ïÓlѨûª×»¾¦]ºž˜¨bø¾nøÝz=ü+Ãu>ŸK,jôlùܨ¼A¢ª˜LàæOÿS^w“W›O ÞÜÀ.îUW ¢øöÁMöÆ¿‹ø6BHù}|[e© äZµ‘`)œ·Û¶-=[>7*o ¨j(¯ùp~®Ò^c"kµÍzyY×½£ÆcP±C“çê—mQ|ç0´§=º 1QÝTäæóh\ÎE`—Ï–ÏŸ*o´¨j6“×ñŠnmùQqÁ˜¼Z-ªjRêõkº¯j`B 3óJ@7±ALšbª ¶(=¤Ù±4üßkåÕëä5þHŸPÂËG`啨ós%¯H)­_szêy:EJÙÁÔ`"IÀœüfß“å½|OŠî[}¡¨–l3yÝÜîHæ»ïÞ¯äÇÙó¯þÇëú•ú÷ç?ÿ¯ÿõ׿þÅ/þìÏþô‘¿þë¢[&ˆ4jvýkk0”…:sUßþ ¨–žÙLä5ëÇŽÔüpb/ÞPÚ E³$ªËäX9EukU(ÈtP»ٴ©ÚÉ#ˆxºyÊJBHUœ+§¨æ ‚hÒÐþ¹=ðÿiÃë_ÿú¿ÿwuìûú§í6ÂÚÿó–’ï¿ÿ›¿)¢U&z’ÞðºÀá?©)jNJaÉ)–¶ªò»wz"‹¬ ¨’²IJsÏV̲ÝfRb¢šç6 •STI.hI}ý:mÿlvq¡÷lÕû·²[­¨Ê¬rŠ*ɽ^_VJmš{¶¾{§ŽéÕ$»AQ%5@6åÓ“ªÏI‰2›Ÿ« WØ¿• ÅÉ.PTIʽU›ò½zµ{n)sÏVNb‘m ¨’Js¯S¢¼zµë‚ÓÅâìLM^a"ëy) ‰¢í¶eáR§“çÎQU²;²Ïiö›ò!sE•<ŸQÏ[-ÏÃÞRó¹ëÆ7ëË´rŠ*Ù‚hJ”››|R¢œœ¨(ÖÙìèHmÛBÈ:Dû!  J@ŸðQTÉóý°L÷‘ªOYå·g+©# ¢*ûŸ*QuŠ*)ÿsXLJéwïôž­:N€dD5 ±}Ÿˆªï«¦r©œ¢JžJ)½ïMù e³ÞÝÑÏJÖ‘8Q)µml™ÒjÅ÷•Ê´rŠ*Yüúìøøà ÈMù0y¥ôû´YI)!UaèûžçûùY©Ÿ+§¨’ÜÜHêÍ*I[Ç¿/ µ0{¶žÛRNVÆ©A¾¢GQ%i\]éõûæ\Y0÷lí÷¯¯¹P€(EÕuáOõ<Ëjµ\7ÇÊ)ª$…nWOI•qS¾ÙLûVŽ´S€Q Z-ˆ]«5 f5iÔŒ*§¨ƒéTïeRªÌ›ò)0y¥Ò±\_Ÿœ0ÛUÓIUσ’[/È­rŠ*ùÌtzy‰•QÑ þ¢=¨›1›]_«)+3í5ŵ©$Zªþ÷¼N««üOòúÅÍìïRžŸËñdÂ૦’èSuÛ¶¬Á l›[åUòÉL)}pP ë4 YÊVÅ>TE·ŒìDQÏG#xRð×Ë3¨Š¢ÚL°z_‡ïcRêà ÛÝg@Þôû''rdÚ¯¤ 0õÙ#"§b•ê þ‡‡:ÉiœáPg¸¾Ö[¸º’(ªƒAÛ ÇÊ)ª CJÁ6-º5ûa<>?W“WÈ|EQ­; ¢ŠyÏ ÇÊ)ª àáAO>©”Òuìo&¯”S`8<:â¶-õ$1¤*Ï€ÿHåÕZ£ûÑÕûM”SÅÝR3‹m×z‘R…`ª½TNQ­-Ó©ò6g ÿŽŽÔ‚dP[¸:²LÕóFOäX9EµÆ¼z¥Eµ¹¶i:ÊN5÷o½»ãr×ê“ ªr¬œ¢Z3Ì}¢<¯©¾ÓçÑïëØGGÊçJªË!U²œ`/+d`•ܫѳås£rŠjm@ÞSئÚzO9}f ìñx8dæ«j²µ¨"F@‰ªë:NØ1 ~¶|nTNQ­÷÷ôŸfÁxüîþ#‹£ªIÊÕþHü—¼¢ 9T ë|nY’ÉÊuñzó,~5V9Eµ\])IÅF'U^½_0y¥œ“ÉÅ=­U"e‹êNSTX¼öSYjø¬”H¿bžÅ¯FïòÍß›¾[ luÁÀÿàÀô¨’]X,ú}常à‚òƒìÓ¦–%nQ­HÊR¥òX‰¨Êî«=‹_Þ‡–jU¹º:>6÷3½¹)ÞÓª¢'¯‹wï¸/VùIͧj¾ z= %qµz~=d3z¿«œ¢Z9º]•UŠBº†Cå[5³Ð!P^—©êlÿ˜^ ÃèuÏsüÛ¶ç…áhÔjÉÈfô ÿžG*§¨V=%])Eò«°TDÀÑ·,+‰Uð8ü©–µ5IN%ªˆé,”EÏ$JÀHÙMµÝÆÔ£Q§³*£êΕST3e:½ºB¨Ôå¥*‘I)&D!d¤ì¦êyذo>wÝø¨™VNQÍ 3PJ§”†ÌrØOÈ>IÌR…É©ÑHrUqö¿è@) õ‹n !Í%1Ÿ*äT‰*Sÿ•X §§æ@:•~·Ë¥¦„Ibæì‰*¢êûjÛ¾\*§¨nÁý½Î(eJÝÜÐoJHñ$NTAJm»ÕrœVky7Õ +§¨nŒÞ»Tg”â@Ÿò‘º›ªï{žïç¥JQ]†ùÝ®l¾§íPLIa Ïœü„”µqª ©*’—ÚWzÏ>!e%&ª¡Š©ƒ Ói·q–cåÕ÷÷ˆ3ÕQŸ>© ¢¼OHUˆ‰j»í8øÛ¸®çÁcåÕ'ôÚ's ßíb˜ÏXSBªCLT-K²§æ»áßSåÕÛ[sçRSTé+%¤º,‰ªü+9Us¯¼‘¢zsûSäSé»] ‘Bœ)=¦„TŠjÎ<<Ü>Òíj›T6‚ÓnÛ¶÷…+¯¨"–ùôÞ¢ÄU-Ÿ÷÷âsê‰z²4û¿LŽ•—^Tïïo?£½œðˆ‹„&Û¤ZT%ÉÉÁÁññé)'ŸiMRýð …«–<ïø3ú:FÔ ¼OÒëR„@é:Šê!¤(+ª°?Õ±)Ÿúfiò^ß¾TÚ¢„Šêg’EUféÅ~ÕQÌä_]ÝÞr®ž’DcEõþ^Ë"†ÿ˜<¢µIÙ•ÆŠ*!„äÁV¢Šd+–Õj¹®¤Ä^VHÃ"y¢gËçFåUBHÍØJT‘l% ƒÀq\ç®ë8a8`Ç€øÙò¹Q9E•R3¶ÕÇ7|ÙbB KT¥aq]Ø®æYüjôN?ýÇ£#ï‰<3·BH~ŒFZɾúêÙ¢†j••ˆ*DVcïUó,~5z'Š*!¤ì(ªŠ0tÈ«ì¾*7¶¬èYüjôþBêÆÖ³ÿž×j‰Åª“¯@6£gñ«±Ê)ª„š±åì¿ãàr6µZê“QæYüj¬rŠ*!¤fl%ªjÖ_5q«4z¿«œ¢J©[ˆê`Ðjž@‰m÷z˜ç—XÔèÙò¹Q9E•R3¶Uϳ P­2°Š%=[>7*§¨BjFFËTçóÑH¢Q—Ï–ÏŸ*§¨Bj×þBH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!UBÉŠ*!„dE•B2„¢J!BQ%„ ¡¨BH†PT !$C(ª„’!U²’ d‹ñêQݶ‡áh†E·‚lE•¤âû­–ì™ëº"NÖß•0\ÞO· m‚NDzZ-uŸ¼ ‚vÛ²lÿOÚ.3þêjþlÔŠj-™NÕÑím÷‰äÒÛ[ý®«+}ÁÀ²z=…¡ãx޶UHÅf¢:›É¿ãq¿¯Žûýáp¹t8ì÷Õ{tiÖm·m× Ã p×]ßö[2«{´ÛŽ¥ëÚöºñoû7!ù@Q­%Z(»Ý—O$—v»ú]ÇÇú¶-bƒV ÿ*a Ïó}5@ ß÷<õúõ6/É Šj-Ù]TÃв–½z"+®ÛjÁîÄ#?Ÿ;t:C̳(ž·/QÝ´íñö&µ> •<ïKTQ{´õ½^§#G¶Ýï›mô¼VËq|jYŽã´Z"Ÿ8sÝv»Õêtp¤¥šä Eµ–ì>ü‡…¶|_)S’Õn{Þh$CÔÑ’=‹²©¨î>üß´íñö®j½v#¬nûîÃÿÑÞ`Ô¦žüHÀ…Ío£ ÿñ yµú”- R ‰–VoÒz’ U’È*aó9o +-K.£gQ6Õýµ=ÞÞôÖÃ"ܧ(Fø´ ­2œkÔ}$ÞFUß·íÑgz=õã!Ï–ò¹ÊÙU’^sÚnãA–VŽÓ` ³ãòÐFÏLö'ª›·}“ÖÃo¹¿é ù\ f´Z2Ý&ÚGÛ(-C¯ÚO œ¢ZU’Bt²Gd „A¨Bc^\½Ó(æYô~ûÕMÛŽaóúÖo2ëŸQ+[I!†÷°Fã-Ö–ªãÈ;`…ã_ŠjqPTI ˜ú¿ü‰2U‚¾×“x>‡tõz¶!ê|_ô,z¿}ŠêfmÇùºÖ‹S‘ËQ·qXܪNLAÁj·QDgÒ_×U½¥¨E•¤‚@(ÛvCézÄ2ˆþÕ¯Ƕ1ˬæÏõYünû þߤí@Z×z Sì£åA€ÀÿvÿÕB_)lìx¥ò3‚+¶-–8Eµ8 Õ?þ·¿ùMÑ@T'jƒÉ¤“bµá*®áL÷(zV\¿7kûæ­ßžç÷ l£Kl{=ý“d¶Q÷Cú›÷§šo¿ëÁW_ýæ7…‰ê‹àûï‹þŠ ©«`ØïíhÞW‰¦þ½_¼øáŠêžiê—ýÞL^íÓuR–~WŠj4õËÆ~7‹¦ö{¢:Ÿc‘\Òð…¢Ú,ØïfÑÔ~ïAT]×qÂquñ˜¢Ú,ØïfÑÔ~ç.ªÈ´#s€Xd½ö¯úÏÿáþVýï'ÝŸýy3þ÷Õ_4§¯ì7ûÝ„ÿ}ý¿DÅ^/þÏ>]]å*ªz…È`Ïù‡?ü`ðûß!¤‚üîw¦–}ú”«¨êøºä4„R7r•:½Ž†¢Ji9ÿ%ï:E•Òr•:$…åvû]ûM!E‘³ýhÛÈ®ƒTÕ[hG!Ï'gQEª]äÜ¡Ji¹{:‘¢™ùj!M„ÓG„’!UBÉŠ*!„dH!¢šž»ª~¤õ5d_L×5s¼×‡Õãú†Ø¥÷»žîw³ë2ô[}ÏëÚï8aØn"ªé¹«êGZ_mÛu±;æ~÷ë,¾ßñËuÕ´~{žãþÞõ”—Õßsl¡(n×› À6áˆêªÜUu#­¯Xa&*¾†E·rý–k±«§¨¦÷[‰ÍhTÇñYZ¿›µüG6Š,DTW宪i} Ce¯ÔSTWý]×óêúˆ¥õ[Êçóå­ëAúß»Õ ðo»]wJÀ7»€ºI¹«Öõ;Ó×q8˜ÞïÁÀqêk·¤õÛ÷±16ì ’‹nåþú­\=›Ôsî NA¢Ú¤ÜU«ûŠ©‹:Jjz¿Ã°ÕÂ0±®¢šÖo a©ÍçN{žþ=ÇÉ`àû­VÝÉŸD!Ãÿæä®Jï+¦,ê»åDZ¿1]#ƒÛö¼úÙliýÖNžz~çÓúíûÊ€©ª¢[¹ Õ&9¯ÓûZ×YÿÕý<¯Î¢šÞïz‹jZ¿›4*Õ=.¤£MÊ]ï«ïã_ünëíŠnãþú­¨ïÏiZ¿¥üÓ§zÿÓú ±UQð¥×ŸÂDµI¹«â}•`" ¾PÝÆýõ[Q_QMë7ÊÇ~¤žé…ÒúÝëÉDU]û§0QmVîª&õ•ýNï7Êë9*YÝï0¬w¿—©¥•D!EAQ%„ ¡¨BH†PTIÎÁhÔŒÕ4„Š*ɬ¤‘•âp·X$V˲}É­ ‚,ÚºªRgø''¹uD©sì"2’X-Ë&·F­tËb q=—!“UPTIn`Õ”:VË•Œçù¾^S5xžä3Z>Tb5³l>‡Uéû½ž¾“ÜYlÍøuÚƒL¶i­Áby½zµyG”¡uñà!”û¾¬3¯£\Õ†³ú­"#q(ª$'Âв–%DdÌu*ÞnK–ÑùÜqxû Ä좀 ŒFxm»í8*Å’Ôt:8‡Å¯+U÷Ij îà8X$W£w„#£ÓA–û¨è[JÛm¼V®‹$ãŒÇ{‘ÞåúCQ%9‘¼Ú[ʔܶ۰eG#I»1Aê¢gQ–EU9<ï‚‹Ui[¾ž,ªÑÖèá?®ÆïhYòšxK,K–gª¼cQwG¯ç8ó9–&ýW!ùCQ%9±JTVàˆƒ+Äõ€9z%ITÕÝ /óJüz²¨F[Õø•º,ªR®Þ«ZÕ–þÕf@Q%9q4‡ÿí¶ Ÿq,CìNGÉØ``n=3IU‘µxV¤øõdQ·ÆÕø·UßoÂŽlPTInD'ªDb!2˜´2Üj"¯ ‚èYôŽI¢*^Jñàj»R&ÆâדD5Þš4KUbè\²EÿEÈ> ¨’Ü€u&žF„TÁ#*$Šƒôôz2#^ÇèYôŽI¢*âåºÊ§j.2-[¦µfÙ§jÞq;Q•³znCâPTIŽ Ê¶¡P: ò%sòr#X IñàuT³ÿú,~¿eQÅü¾mËüº9RÍabhù:b pUe5Mj ^%ÿŠ F︨âgÇ:»(©3U’+’ðn9´JÒÁ᪊ 5ÇEÏÒQžSs!¬™jnùzò¢Ùhkt«–ïHÈ:(ª¤Â¬Û¤£)›x2Á¯©0UR>ø•#„ ùÿO@%dò…3á%tEXtdate:create2018-10-06T17:29:14+02:00#%²N%tEXtdate:modify2018-10-06T17:29:14+02:00Rx ò1tEXtps:HiResBoundingBox490.878x396.666+31.092+18.474bñâétEXtps:LevelAdobe-3.0 EPSF-3.0 ›p»ãIEND®B`‚queueing/doc/queueing.html0000664000175000017500000141076213356152314015555 0ustar morenomoreno queueing

queueing

Copyright © 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2018 Moreno Marzolla.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.

Table of Contents

Next: , Up: (dir)   [Contents][Index]

This manual documents how to install and run the Queueing package. It corresponds to version 1.2.6 of the package.


Next: , Previous: , Up: Top   [Contents][Index]

1 Summary


1.1 About the Queueing Package

This document describes the queueing package for GNU Octave (queueing in short). The queueing package, previously known as qnetworks toolbox, is a collection of functions for analyzing queueing networks and Markov chains written for GNU Octave. Specifically, queueing contains functions for analyzing Jackson networks, open, closed or mixed product-form BCMP networks, and computing performance bounds. The following algorithms are available

  • Convolution for closed, single-class product-form networks with load-dependent service centers;
  • Exact and approximate Mean Value Analysis (MVA) for single and multiple class product-form closed networks;
  • MVA for mixed, multiple class product-form networks with load-independent service centers;
  • Approximate MVA for closed, single-class networks with blocking (MVABLO algorithm by F. Akyildiz);
  • Asymptotic Bounds, Balanced System Bounds and Geometric Bounds;

queueing provides functions for analyzing the following types of single-station queueing systems:

  • M/M/1
  • M/M/m
  • M/M/\infty
  • M/M/1/k single-server, finite capacity system
  • M/M/m/k multiple-server, finite capacity system
  • Asymmetric M/M/m
  • M/G/1 (general service time distribution)
  • M/H_m/1 (Hyperexponential service time distribution)

Functions for Markov chain analysis are also provided (discrete- and continuous-time chains are supported):

  • Birth-death processes;
  • Transient and stationary state occupancy probabilities;
  • Mean time to absorption;
  • Expected sojourn times and time-averaged sojourn times;
  • Mean first passage times;

The queueing package is distributed under the terms of the GNU General Public License (GPL), version 3 or later (see Copying). You are encouraged to share this software with others, and improve this package by contributing additional functions and reporting bugs. See Contributing Guidelines.

If you use the queueing package in a technical paper, please cite it as:

Moreno Marzolla, The qnetworks Toolbox: A Software Package for Queueing Networks Analysis. Khalid Al-Begain, Dieter Fiems and William J. Knottenbelt, Editors, Proceedings 17th International Conference on Analytical and Stochastic Modeling Techniques and Applications (ASMTA 2010) Cardiff, UK, June 14–16, 2010, volume 6148 of Lecture Notes in Computer Science, Springer, pp. 102–116, ISBN 978-3-642-13567-5

If you use BibTeX, this is the citation block:

@inproceedings{queueing,
  author    = {Moreno Marzolla},
  title     = {The qnetworks Toolbox: A Software Package for Queueing 
               Networks Analysis},
  booktitle = {Analytical and Stochastic Modeling Techniques and 
               Applications, 17th International Conference, 
               ASMTA 2010, Cardiff, UK, June 14-16, 2010. Proceedings},
  editor    = {Khalid Al-Begain and Dieter Fiems and William J. Knottenbelt},
  year      = {2010},
  publisher = {Springer},
  series    = {Lecture Notes in Computer Science},
  volume    = {6148},
  pages     = {102--116},
  ee        = {http://dx.doi.org/10.1007/978-3-642-13568-2_8},
  isbn      = {978-3-642-13567-5}
}

An early draft of the paper above is available as Technical Report UBLCS-2010-04, February 2010, Department of Computer Science, University of Bologna, Italy.


1.2 Contributing Guidelines

Contributions and bug reports are always welcome. If you want to contribute to the queueing package, here are some guidelines:

  • If you are contributing a new function, please embed proper documentation within the function itself. The documentation must be in texinfo format, so that it can be extracted and included into the printable manual. See the existing functions for the documentation style.
  • Make sure that each new function validates its input parameters. For example, a function accepting vectors should check whether the dimensions match.
  • Provide bibliographic references for each new algorithm you contribute. Document any significant difference from the reference. Update the doc/references.txi file if appropriate.
  • Include test and demo blocks. Test blocks are particularly important, since most algorithms are tricky to implement correctly. If appropriate, test blocks should also verify that the function fails on incorrect inputs.

Send your contribution to Moreno Marzolla (moreno.marzolla@unibo.it). If you are a user of this package and find it useful, let me know by dropping me a line. Thanks.


1.3 Acknowledgments

The following people (listed alphabetically) contributed to the queueing package, either by providing feedback, reporting bugs or contributing code: Philip Carinhas, Phil Colbourn, Diego Didona, Yves Durand, Marco Guazzone, Dmitry Kolesnikov, Michele Mazzucco, Marco Paolieri.


Next: , Previous: , Up: Top   [Contents][Index]

2 Installation and Getting Started


2.1 Installation through Octave package management system

The most recent version of queueing is 1.2.6 and can be downloaded from Octave-Forge

https://octave.sourceforge.io/queueing/

Additional information can be found at

http://www.moreno.marzolla.name/software/queueing/

To install queueing, follow these steps:

  1. If you have a recent version of GNU Octave and a network connection, you can install queueing from Octave command prompt using this command:
    octave:1> pkg install -forge queueing
    

    The command above will download and install the latest version of the queueing package from Octave Forge, and install it on your machine.

    If you do not have root access, you can perform a local install with:

    octave:1> pkg install -local -forge queueing
    

    This will install queueing in your home directory, and the package will be available to the current user only.

  2. Alternatively, you can first download the queueing tarball from Octave-Forge; to install the package in the system-wide location issue this command at the Octave prompt:
    octave:1> pkg install queueing-1.2.6.tar.gz
    

    (you may need to start Octave as root in order to allow the installation to copy the files to the target locations). After this, all functions will be available each time Octave starts, without the need to tweak the search path.

    If you do not have root access, you can do a local install using:

    octave:1> pkg install -local queueing-1.2.6.tar.gz
    
  3. Use the pkg list command at the Octave prompt to check that the queueing package has been succesfully installed; you should see something like:
    octave:1>pkg list queueing
    Package Name  | Version | Installation directory
    --------------+---------+-----------------------
        queueing  |   1.2.6 | /home/moreno/octave/queueing-1.2.6
    
  4. Starting from version 1.1.1, queueing is no longer automatically loaded on Octave start. To make the functions available for use, you need to issue the command
    octave:1>pkg load queueing 
    

    at the Octave prompt. To automatically load queueing each time Octave starts, you can add the command above to the startup script (usually, ~/.octaverc on Unix systems).

  5. To completely remove queueing from your system, use the pkg uninstall command:
    octave:1> pkg uninstall queueing
    

2.2 Manual installation

If you want to manually install queueing in a custom location, you can download the tarball and unpack it somewhere:

tar xvfz queueing-1.2.6.tar.gz
cd queueing-1.2.6/queueing/

Copy all .m files from the inst/ directory to some target location. Then, start Octave with the -p option to add the target location to the search path, so that Octave will find all queueing functions automatically:

octave -p /path/to/queueing

For example, if all queueing m-files are in /usr/local/queueing, you can start Octave as follows:

octave -p /usr/local/queueing

If you want, you can add the following line to ~/.octaverc:

addpath("/path/to/queueing");

so that the path /path/to/queueing is automatically added to the search path each time Octave is started, and you no longer need to specify the -p option on the command line.


2.3 Development sources

The source code of the queueing package can be found in the Mercurial repository at the URL:

https://sourceforge.net/p/octave/queueing/ci/default/tree/

The source distribution contains additional development files that are not present in the installation tarball. This section briefly describes the content of the source tree. This is only relevant for developers who want to modify the code or the documentation.

The source distribution contains the following directories:

doc/

Documentation sources. Most of the documentation is extracted from the comment blocks of function files from the inst/ directory.

inst/

This directory contains the m-files which implement the various algorithms provided by queueing. As a notational convention, the names of functions for Queueing Networks begin with the ‘qn’ prefix; the name of functions for Continuous-Time Markov Chains (CTMCs) begin with the ‘ctmc’ prefix, and the names of functions for Discrete-Time Markov Chains (DTMCs) begin with the ‘dtmc’ prefix.

test/

This directory contains the test scripts used to run all function tests.

devel/

This directory contains functions that are either not working properly, or need additional testing before they are moved to the inst/ directory.

The queueing package ships with a Makefile which can be used to produce the documentation (in PDF and HTML format), and automatically execute all function tests. The following targets are defined:

all

Running ‘make’ (or ‘make all’) on the top-level directory builds the programs used to extract the documentation from the comments embedded in the m-files, and then produce the documentation in PDF and HTML format (doc/queueing.pdf and doc/queueing.html, respectively).

check

Running ‘make check’ will execute all tests contained in the m-files. If you modify the code of any function in the inst/ directory, you should run the tests to ensure that no errors have been introduced. You are also encouraged to contribute new tests, especially for functions that are not adequately validated.

clean
distclean
dist

The ‘make clean’, ‘make distclean’ and ‘make dist’ commands are used to clean up the source directory and prepare the distribution archive in compressed tar format.


2.4 Naming Conventions

Most of the functions in the queueing package obey a common naming convention. Function names are made of several parts; the first part is a prefix which indicates the class of problems the function addresses:

ctmc-

Functions for continuous-time Markov chains

dtmc-

Functions for discrete-time Markov chains

qs-

Functions for analyzing single-station queueing systems (individual service centers)

qn-

Functions for analyzing queueing networks

Functions dealing with Markov chains start with either the ctmc or dtmc prefix; the prefix is optionally followed by an additional string which hints at what the function does:

-bd

Birth-Death process

-mtta

Mean Time to Absorption

-fpt

First Passage Times

-exps

Expected Sojourn Times

-taexps

Time-Averaged Expected Sojourn Times

For example, function ctmcbd returns the infinitesimal generator matrix for a continuous birth-death process, while dtmcbd returns the transition probability matrix for a discrete birth-death process. Note that there exist functions ctmc and dtmc (without any suffix) that compute steady-state and transient state occupancy probabilities for CTMCs and DTMCs, respectively. See Markov Chains.

Functions whose name starts with qs- deal with single station queueing systems. The suffix describes the type of system, e.g., qsmm1 for M/M/1, qnmmm for M/M/m and so on. See Single Station Queueing Systems.

Finally, functions whose name starts with qn- deal with queueing networks. The character that follows indicates whether the function handles open ('o') or closed ('c') networks, and whether there is a single customer class ('s') or multiple classes ('m'). The string mix indicates that the function supports mixed networks with both open and closed customer classes.

-os-

Open, single-class network: open network with a single class of customers

-om-

Open, multiclass network: open network with multiple job classes

-cs-

Closed, single-class network

-cm-

Closed, multiclass network

-mix-

Mixed network with open and closed classes of customers

The last part of the function name indicates the algorithm implemented by the function. See Queueing Networks.

-aba

Asymptotic Bounds Analysis

-bsb

Balanced System Bounds

-gb

Geometric Bounds

-pb

PB Bounds

-cb

Composite Bounds (CB)

-mva

Mean Value Analysis (MVA) algorithm

-cmva

Conditional MVA

-mvald

MVA with general load-dependent servers

-mvaap

Approximate MVA

-mvablo

MVABLO approximation for blocking queueing networks

-conv

Convolution algorithm

-convld

Convolution algorithm with general load-dependent servers

The current version (1.2.6) of the queueing package still supports the naming convention used in old releases of queueing. These old functions are no longer documented and will be removed in future releases. Calling one of the deprecate functions results in a warning message being displayed; the message appears only one time per session:

octave:1> qnclosedab(10,[1 2 3])
    -| warning: qnclosedab is deprecated. Please use qncsaba instead
    ⇒ ans =  0.16667

Therefore, your legacy code should run with the current version of the queueing package. You can turn off all warnings with the command:

octave:1> warning ("off", "qn:deprecated-function");

However, it is recommended to update your code to the new API and not ignore the warnings above. To help catching usages of deprecated functions, you can transform warnings into errors so that your application stops immediately:

octave:1> warning ("error", "qn:deprecated-function");

2.5 Quick start Guide

You can use all functions by simply invoking their name with the appropriate parameters; an error is shown in case of missing/wrong parameters. Extensive documentation is provided for each function, and can be displayed with the help command. For example:

octave:2> help qncsmvablo

shows the documentation for the qncsmvablo function. Additional information can be found in the queueing manual, that is available in PDF format in doc/queueing.pdf and in HTML format in doc/queueing.html.

Many functions have demo blocks showing usage examples. To execute the demos for the qnclosed function, use the demo command:

octave:4> demo qnclosed

We now illustrate a few examples of how the queueing package can be used. More examples are provided in the manual.

Example 1 Compute the stationary state occupancy probabilities of a continuous-time Markov chain with infinitesimal generator matrix

    / -0.8   0.6   0.2 \
Q = |  0.3  -0.7   0.4 |
    \  0.2   0.2  -0.4 /
Q = [ -0.8  0.6  0.2; \
       0.3 -0.7  0.4; \
       0.2  0.2 -0.4 ];
q = ctmc(Q)
    ⇒ q = 0.23256   0.32558   0.44186

Example 2 Compute the transient state occupancy probability after n=3 transitions of a three state discrete-time birth-death process, with birth probabilities \lambda_{01} = 0.3 and \lambda_{12} = 0.5 and death probabilities \mu_{10} = 0.5 and \mu_{21} = 0.7, assuming that the system is initially in state zero (i.e., the initial state occupancy probabilities are [1, 0, 0]).

n = 3;
p0 = [1 0 0];
P = dtmcbd( [0.3 0.5], [0.5 0.7] );
p = dtmc(P,n,p0)
    ⇒ p = 0.55300   0.29700   0.15000

Example 3 Compute server utilization, response time, mean number of requests and throughput of a closed queueing network with N=4 requests and three M/M/1–FCFS queues with mean service times {\bf S} = [1.0, 0.8, 1.4] and average number of visits {\bf V} = [1.0, 0.8, 0.8]

S = [1.0 0.8 1.4];
V = [1.0 0.8 0.8];
N = 4;
[U R Q X] = qncsmva(N, S, V)
    ⇒ 
     U = 0.70064   0.44841   0.78471
     R = 2.1030    1.2642    3.2433
     Q = 1.47346   0.70862   1.81792
     X = 0.70064   0.56051   0.56051

Example 4 Compute server utilization, response time, mean number of requests and throughput of an open queueing network with three M/M/1–FCFS queues with mean service times {\bf S} = [1.0, 0.8, 1.4] and average number of visits {\bf V} = [1.0, 0.8, 0.8]. The overall arrival rate is \lambda = 0.8 requests/second.

S = [1.0 0.8 1.4];
V = [1.0 0.8 0.8];
lambda = 0.8;
[U R Q X] = qnos(lambda, S, V)
    ⇒ 
     U = 0.80000   0.51200   0.89600
     R = 5.0000    1.6393   13.4615
     Q = 4.0000    1.0492    8.6154
     X = 0.80000   0.64000   0.64000

3 Markov Chains


3.1 Discrete-Time Markov Chains

Let X_0, X_1, …, X_n, … be a sequence of random variables defined over the discrete state space 1, 2, …. The sequence X_0, X_1, …, X_n, … is a stochastic process with discrete time 0, 1, 2, …. A Markov chain is a stochastic process {X_n, n=0, 1, 2, …} which satisfies the following Markov property:

P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, …, X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)

which basically means that the probability that the system is in a particular state at time n+1 only depends on the state the system was at time n.

The evolution of a Markov chain with finite state space {1, 2, …, N} can be fully described by a stochastic matrix {\bf P}(n) = [ P_{i,j}(n) ] where P_{i, j}(n) = P( X_{n+1} = j\ |\ X_n = i ). If the Markov chain is homogeneous (that is, the transition probability matrix {\bf P}(n) is time-independent), we can write {\bf P} = [P_{i, j}], where P_{i, j} = P( X_{n+1} = j\ |\ X_n = i ) for all n=0, 1, ….

The transition probability matrix \bf P must satisfy the following two properties:

  1. P_{i, j} ≥ 0 for all 1 ≤ i, j ≤ N;
  2. \sum_{j=1}^N P_{i,j} = 1 for all i
Function File: [r err] = dtmcchkP (P)

Check whether P is a valid transition probability matrix.

If P is valid, r is the size (number of rows or columns) of P. If P is not a transition probability matrix, r is set to zero, and err to an appropriate error string.

A DTMC is irreducible if every state can be reached with non-zero probability from every other state.

Function File: [r s] = dtmcisir (P)

Check if P is irreducible, and identify Strongly Connected Components (SCC) in the transition graph of the DTMC with transition matrix P.

INPUTS

P(i,j)

transition probability from state i to state j. P must be an N \times N stochastic matrix.

OUTPUTS

r

1 if P is irreducible, 0 otherwise.

s(i)

strongly connected component (SCC) that state i belongs to. SCCs are numbered 1, 2, …. If the graph is strongly connected, then there is a single SCC and the predicate all(s == 1) evaluates to true.


3.1.1 State occupancy probabilities

Given a discrete-time Markov chain with state space {1, 2, …, N}, we denote with {\bf \pi}(n) = \left[\pi_1(n), … \pi_N(n) \right] the state occupancy probability vector at step n, n = 0, 1, …. \pi_i(n) is the probability that the system is in state i after n transitions.

Given the transition probability matrix \bf P and the initial state occupancy probability vector {\bf \pi}(0) = \left[\pi_1(0), …, \pi_N(0)\right], {\bf \pi}(n) can be computed as:

\pi(n) = \pi(0) P^n

Under certain conditions, there exists a stationary state occupancy probability {\bf \pi} = \lim_{n \rightarrow +\infty} {\bf \pi}(n), which is independent from {\bf \pi}(0). The vector \bf \pi is the solution of the following linear system:

/
| \pi P   = \pi
| \pi 1^T = 1
\

where \bf 1 is the row vector of ones, and ( \cdot )^T the transpose operator.

Function File: p = dtmc (P)
Function File: p = dtmc (P, n, p0)

Compute stationary or transient state occupancy probabilities for a discrete-time Markov chain.

With a single argument, compute the stationary state occupancy probabilities p(1), …, p(N) for a discrete-time Markov chain with finite state space {1, …, N} and with N \times N transition matrix P. With three arguments, compute the transient state occupancy probabilities p(1), …, p(N) that the system is in state i after n steps, given initial occupancy probabilities p0(1), …, p0(N).

INPUTS

P(i,j)

transition probabilities from state i to state j. P must be an N \times N irreducible stochastic matrix, meaning that the sum of each row must be 1 (\sum_{j=1}^N P_{i, j} = 1), and the rank of P must be N.

n

Number of transitions after which state occupancy probabilities are computed (scalar, n ≥ 0)

p0(i)

probability that at step 0 the system is in state i (vector of length N).

OUTPUTS

p(i)

If this function is called with a single argument, p(i) is the steady-state probability that the system is in state i. If this function is called with three arguments, p(i) is the probability that the system is in state i after n transitions, given the probabilities p0(i) that the initial state is i.


See also: ctmc.

EXAMPLE

The following example is from GrSn97. Let us consider a maze with nine rooms, as shown in the following figure

+-----+-----+-----+
|     |     |     |
|  1     2     3  |
|     |     |     |
+-   -+-   -+-   -+
|     |     |     |
|  4     5     6  |
|     |     |     |
+-   -+-   -+-   -+
|     |     |     |
|  7     8     9  |
|     |     |     |
+-----+-----+-----+

A mouse is placed in one of the rooms and can wander around. At each step, the mouse moves from the current room to a neighboring one with equal probability. For example, if it is in room 1, it can move to room 2 and 4 with probability 1/2, respectively; if the mouse is in room 8, it can move to either 7, 5 or 9 with probability 1/3.

The transition probabilities P_{i, j} from room i to room j can be summarized in the following matrix:

        / 0     1/2   0     1/2   0     0     0     0     0   \
        | 1/3   0     1/3   0     1/3   0     0     0     0   |
        | 0     1/2   0     0     0     1/2   0     0     0   |
        | 1/3   0     0     0     1/3   0     1/3   0     0   |
    P = | 0     1/4   0     1/4   0     1/4   0     1/4   0   |
        | 0     0     1/3   0     1/3   0     0     0     1/3 |
        | 0     0     0     1/2   0     0     0     1/2   0   |
        | 0     0     0     0     1/3   0     1/3   0     1/3 |
        \ 0     0     0     0     0     1/2   0     1/2   0   /

The stationary state occupancy probabilities can then be computed with the following code:

 P = zeros(9,9);
 P(1,[2 4]    ) = 1/2;
 P(2,[1 5 3]  ) = 1/3;
 P(3,[2 6]    ) = 1/2;
 P(4,[1 5 7]  ) = 1/3;
 P(5,[2 4 6 8]) = 1/4;
 P(6,[3 5 9]  ) = 1/3;
 P(7,[4 8]    ) = 1/2;
 P(8,[7 5 9]  ) = 1/3;
 P(9,[6 8]    ) = 1/2;
 p = dtmc(P);
 disp(p)
    ⇒ 0.083333   0.125000   0.083333   0.125000   
       0.166667   0.125000   0.083333   0.125000   
       0.083333

3.1.2 Birth-death process

Function File: P = dtmcbd (b, d)

Returns the transition probability matrix P for a discrete birth-death process over state space 1, …, N. For each i=1, …, N-1, b(i) is the transition probability from state i to state i+1, and d(i) is the transition probability from state i+1 to state i.

Matrix \bf P is therefore defined as:

/                                                             \
| 1-b(1)     b(1)                                             |
|  d(1)  (1-d(1)-b(2))     b(2)                               |
|            d(2)      (1-d(2)-b(3))     b(3)                 |
|                                                             |
|                 ...           ...          ...              |
|                                                             |
|                         d(N-2)   (1-d(N-2)-b(N-1))  b(N-1)  |
|                                        d(N-1)      1-d(N-1) |
\                                                             /

where \lambda_i and \mu_i are the birth and death probabilities, respectively.


See also: ctmcbd.


3.1.3 Expected Number of Visits

Given a N state discrete-time Markov chain with transition matrix \bf P and an integer n ≥ 0, we let L_i(n) be the the expected number of visits to state i during the first n transitions. The vector {\bf L}(n) = \left[ L_1(n), …, L_N(n) \right] is defined as

         n            n
        ___          ___
       \            \           i
L(n) =  >   pi(i) =  >   pi(0) P
       /___         /___
        i=0          i=0

where {\bf \pi}(i) = {\bf \pi}(0){\bf P}^i is the state occupancy probability after i transitions, and {\bf \pi}(0) = \left[\pi_1(0), …, \pi_N(0) \right] are the initial state occupancy probabilities.

If \bf P is absorbing, i.e., the stochastic process eventually enters a state with no outgoing transitions, then we can compute the expected number of visits until absorption \bf L. To do so, we first rearrange the states by rewriting \bf P as

    / Q | R \
P = |---+---|
    \ 0 | I /

where the first t states are transient and the last r states are absorbing (t+r = N). The matrix {\bf N} = ({\bf I} - {\bf Q})^{-1} is called the fundamental matrix; N_{i,j} is the expected number of times the process is in the j-th transient state assuming it started in the i-th transient state. If we reshape \bf N to the size of \bf P (filling missing entries with zeros), we have that, for absorbing chains, {\bf L} = {\bf \pi}(0){\bf N}.

Function File: L = dtmcexps (P, n, p0)
Function File: L = dtmcexps (P, p0)

Compute the expected number of visits to each state during the first n transitions, or until abrosption.

INPUTS

P(i,j)

N \times N transition matrix. P(i,j) is the transition probability from state i to state j.

n

Number of steps during which the expected number of visits are computed (n ≥ 0). If n=0, returns p0. If n > 0, returns the expected number of visits after exactly n transitions.

p0(i)

Initial state occupancy probabilities; p0(i) is the probability that the system is in state i at step 0.

OUTPUTS

L(i)

When called with two arguments, L(i) is the expected number of visits to state i before absorption. When called with three arguments, L(i) is the expected number of visits to state i during the first n transitions.

REFERENCES

  • Grinstead, Charles M.; Snell, J. Laurie (July 1997). Introduction to Probability, Ch. 11: Markov Chains. American Mathematical Society. ISBN 978-0821807491.

See also: ctmcexps.


3.1.4 Time-averaged expected sojourn times

Function File: M = dtmctaexps (P, n, p0)
Function File: M = dtmctaexps (P, p0)

Compute the time-averaged sojourn times M(i), defined as the fraction of time spent in state i during the first n transitions (or until absorption), assuming that the state occupancy probabilities at time 0 are p0.

INPUTS

P(i,j)

N \times N transition probability matrix.

Number of transitions during which the time-averaged expected sojourn times are computed (n ≥ 0). if n = 0, returns p0.

p0(i)

Initial state occupancy probabilities.

OUTPUTS

M(i)

If this function is called with three arguments, M(i) is the expected fraction of steps {0, …, n} spent in state i, assuming that the state occupancy probabilities at time zero are p0. If this function is called with two arguments, M(i) is the expected fraction of steps spent in state i until absorption.


See also: dtmcexps.


3.1.5 Mean Time to Absorption

The mean time to absorption is defined as the average number of transitions that are required to enter an absorbing state, starting from a transient state or given initial state occupancy probabilities {\bf \pi}(0).

Let t_i be the expected number of transitions before being absorbed in any absorbing state, starting from state i. The vector {\bf t} = [t_1, …, t_N] can be computed from the fundamental matrix \bf N (see Expected number of visits (DTMC)) as

t = 1 N

where {\bf 1} = [1, …, 1].

Let {\bf B} = [ B_{i, j} ] be a matrix where B_{i, j} is the probability of being absorbed in state j, starting from transient state i. Again, using matrices \bf N and \bf R (see Expected number of visits (DTMC)) we can write

B = N R

Function File: [t N B] = dtmcmtta (P)
Function File: [t N B] = dtmcmtta (P, p0)

Compute the expected number of steps before absorption for a DTMC with state space {1, … N} and transition probability matrix P.

INPUTS

P(i,j)

N \times N transition probability matrix. P(i,j) is the transition probability from state i to state j.

p0(i)

Initial state occupancy probabilities (vector of length N).

OUTPUTS

t
t(i)

When called with a single argument, t is a vector of length N such that t(i) is the expected number of steps before being absorbed in any absorbing state, starting from state i; if i is absorbing, t(i) = 0. When called with two arguments, t is a scalar, and represents the expected number of steps before absorption, starting from the initial state occupancy probability p0.

N(i)
N(i,j)

When called with a single argument, N is the N \times N fundamental matrix for P. N(i,j) is the expected number of visits to transient state j before absorption, if the system started in transient state i. The initial state is counted if i = j. When called with two arguments, N is a vector of length N such that N(j) is the expected number of visits to transient state j before absorption, given initial state occupancy probability P0.

B(i)
B(i,j)

When called with a single argument, B is a N \times N matrix where B(i,j) is the probability of being absorbed in state j, starting from transient state i; if j is not absorbing, B(i,j) = 0; if i is absorbing, B(i,i) = 1 and B(i,j) = 0 for all i \neq j. When called with two arguments, B is a vector of length N where B(j) is the probability of being absorbed in state j, given initial state occupancy probabilities p0.

REFERENCES

  • Grinstead, Charles M.; Snell, J. Laurie (July 1997). Introduction to Probability, Ch. 11: Markov Chains. American Mathematical Society. ISBN 978-0821807491.

See also: ctmcmtta.


3.1.6 First Passage Times

The First Passage Time M_{i, j} is the average number of transitions needed to enter state j for the first time, starting from state i. Matrix \bf M satisfies the property

           ___
          \
M_ij = 1 + >   P_ij * M_kj
          /___
          k!=j

To compute {\bf M} = [ M_{i, j}] a different formulation is used. Let \bf W be the N \times N matrix having each row equal to the stationary state occupancy probability vector \bf \pi for \bf P; let \bf I be the N \times N identity matrix (i.e., the matrix of all ones). Define \bf Z as follows:

               -1
Z = (I - P + W)

Then, we have that

       Z_jj - Z_ij
M_ij = -----------
          \pi_j

According to the definition above, M_{i,i} = 0. We arbitrarily set M_{i,i} to the mean recurrence time r_i for state i, that is the average number of transitions needed to return to state i starting from it. r_i is:

        1
r_i = -----
      \pi_i
Function File: M = dtmcfpt (P)

Compute mean first passage times and mean recurrence times for an irreducible discrete-time Markov chain over the state space {1, …, N}.

INPUTS

P(i,j)

transition probability from state i to state j. P must be an irreducible stochastic matrix, which means that the sum of each row must be 1 (\sum_{j=1}^N P_{i j} = 1), and the rank of P must be N.

OUTPUTS

M(i,j)

For all 1 ≤ i, j ≤ N, i \neq j, M(i,j) is the average number of transitions before state j is entered for the first time, starting from state i. M(i,i) is the mean recurrence time of state i, and represents the average time needed to return to state i.

REFERENCES

  • Grinstead, Charles M.; Snell, J. Laurie (July 1997). Introduction to Probability, Ch. 11: Markov Chains. American Mathematical Society. ISBN 978-0821807491.

See also: ctmcfpt.


3.2 Continuous-Time Markov Chains

A stochastic process {X(t), t ≥ 0} is a continuous-time Markov chain if, for all integers n, and for any sequence t_0, t_1 , …, t_n, t_{n+1} such that t_0 < t_1 < … < t_n < t_{n+1}, we have

P(X_{n+1} = x_{n+1} | X_n = x_n, X_{n-1} = x_{n-1}, ..., X_0 = x_0) = P(X_{n+1} = x_{n+1} | X_n = x_n)

A continuous-time Markov chain is defined according to an infinitesimal generator matrix {\bf Q} = [Q_{i,j}], where for each i \neq j, Q_{i, j} is the transition rate from state i to state j. The matrix \bf Q must satisfy the property that, for all i, \sum_{j=1}^N Q_{i, j} = 0.

Function File: [result err] = ctmcchkQ (Q)

If Q is a valid infinitesimal generator matrix, return the size (number of rows or columns) of Q. If Q is not an infinitesimal generator matrix, set result to zero, and err to an appropriate error string.

Similarly to the DTMC case, a CTMC is irreducible if every state is eventually reachable from every other state in finite time.

Function File: [r s] = ctmcisir (P)

Check if Q is irreducible, and identify Strongly Connected Components (SCC) in the transition graph of the DTMC with infinitesimal generator matrix Q.

INPUTS

Q(i,j)

Infinitesimal generator matrix. Q is a N \times N square matrix where Q(i,j) is the transition rate from state i to state j, for 1 ≤ i \neq j ≤ N.

OUTPUTS

r

1 if Q is irreducible, 0 otherwise.

s(i)

strongly connected component (SCC) that state i belongs to. SCCs are numbered 1, 2, …. If the graph is strongly connected, then there is a single SCC and the predicate all(s == 1) evaluates to true.


3.2.1 State occupancy probabilities

Similarly to the discrete case, we denote with {\bf \pi}(t) = \left[\pi_1(t), …, \pi_N(t) \right] the state occupancy probability vector at time t. \pi_i(t) is the probability that the system is in state i at time t ≥ 0.

Given the infinitesimal generator matrix \bf Q and initial state occupancy probabilities {\bf \pi}(0) = \left[\pi_1(0), …, \pi_N(0)\right], the occupancy probabilities {\bf \pi}(t) at time t can be computed as:

\pi(t) = \pi(0) exp(Qt)

where \exp( {\bf Q} t ) is the matrix exponential of {\bf Q} t. Under certain conditions, there exists a stationary state occupancy probability {\bf \pi} = \lim_{t \rightarrow +\infty} {\bf \pi}(t) that is independent from {\bf \pi}(0). \bf \pi is the solution of the following linear system:

/
| \pi Q   = 0
| \pi 1^T = 1
\
Function File: p = ctmc (Q)
Function File: p = ctmc (Q, t. p0)

Compute stationary or transient state occupancy probabilities for a continuous-time Markov chain.

With a single argument, compute the stationary state occupancy probabilities p(1), …, p(N) for a continuous-time Markov chain with finite state space {1, …, N} and N \times N infinitesimal generator matrix Q. With three arguments, compute the state occupancy probabilities p(1), …, p(N) that the system is in state i at time t, given initial state occupancy probabilities p0(1), …, p0(N) at time 0.

INPUTS

Q(i,j)

Infinitesimal generator matrix. Q is a N \times N square matrix where Q(i,j) is the transition rate from state i to state j, for 1 ≤ i \neq j ≤ N. Q must satisfy the property that \sum_{j=1}^N Q_{i, j} = 0

t

Time at which to compute the transient probability (t ≥ 0). If omitted, the function computes the steady state occupancy probability vector.

p0(i)

probability that the system is in state i at time 0.

OUTPUTS

p(i)

If this function is invoked with a single argument, p(i) is the steady-state probability that the system is in state i, i = 1, …, N. If this function is invoked with three arguments, p(i) is the probability that the system is in state i at time t, given the initial occupancy probabilities p0(1), …, p0(N).


See also: dtmc.

EXAMPLE

Consider a two-state CTMC where all transition rates between states are equal to 1. The stationary state occupancy probabilities can be computed as follows:

 Q = [ -1  1; ...
        1 -1  ];
 q = ctmc(Q)
    ⇒ q = 0.50000   0.50000

3.2.2 Birth-Death Process

Function File: Q = ctmcbd (b, d)

Returns the infinitesimal generator matrix Q for a continuous birth-death process over the finite state space {1, …, N}. For each i=1, …, N-1, b(i) is the transition rate from state i to state i+1, and d(i) is the transition rate from state i+1 to state i.

Matrix \bf Q is therefore defined as:

/                                                          \
| -b(1)     b(1)                                           |
|  d(1) -(d(1)+b(2))     b(2)                              |
|           d(2)     -(d(2)+b(3))        b(3)              |
|                                                          |
|                ...           ...          ...            |
|                                                          |
|                       d(N-2)    -(d(N-2)+b(N-1))  b(N-1) |
|                                       d(N-1)     -d(N-1) |
\                                                          /

where \lambda_i and \mu_i are the birth and death rates, respectively.


See also: dtmcbd.


3.2.3 Expected Sojourn Times

Given a N state continuous-time Markov Chain with infinitesimal generator matrix \bf Q, we define the vector {\bf L}(t) = \left[L_1(t), …, L_N(t)\right] such that L_i(t) is the expected sojourn time in state i during the interval [0,t), assuming that the initial occupancy probabilities at time 0 were {\bf \pi}(0). {\bf L}(t) can be expressed as the solution of the following differential equation:

 dL
 --(t) = L(t) Q + pi(0),    L(0) = 0
 dt

Alternatively, {\bf L}(t) can also be expressed in integral form as:

       / t
L(t) = |   pi(u) du
       / 0

where {\bf \pi}(t) = {\bf \pi}(0) \exp({\bf Q}t) is the state occupancy probability at time t; \exp({\bf Q}t) is the matrix exponential of {\bf Q}t.

If there are absorbing states, we can define the vector of expected sojourn times until absorption {\bf L}(\infty), where for each transient state i, L_i(\infty) is the expected total time spent in state i until absorption, assuming that the system started with given state occupancy probabilities {\bf \pi}(0). Let \tau be the set of transient (i.e., non absorbing) states; let {\bf Q}_\tau be the restriction of \bf Q to the transient sub-states only. Similarly, let {\bf \pi}_\tau(0) be the restriction of the initial state occupancy probability vector {\bf \pi}(0) to transient states \tau.

The expected time to absorption {\bf L}_\tau(\infty) is defined as the solution of the following equation:

L_T( inf ) Q_T = -pi_T(0)
Function File: L = ctmcexps (Q, t, p )
Function File: L = ctmcexps (Q, p)

With three arguments, compute the expected times L(i) spent in each state i during the time interval [0,t], assuming that the initial occupancy vector is p. With two arguments, compute the expected time L(i) spent in each transient state i until absorption.

Note: In its current implementation, this function requires that an absorbing state is reachable from any non-absorbing state of Q.

INPUTS

Q(i,j)

N \times N infinitesimal generator matrix. Q(i,j) is the transition rate from state i to state j, 1 ≤ i \neq j ≤ N. The matrix Q must also satisfy the condition \sum_{j=1}^N Q_{ij} = 0.

t

If given, compute the expected sojourn times in [0,t]

p(i)

Initial occupancy probability vector; p(i) is the probability the system is in state i at time 0, i = 1, …, N

OUTPUTS

L(i)

If this function is called with three arguments, L(i) is the expected time spent in state i during the interval [0,t]. If this function is called with two arguments L(i) is the expected time spent in transient state i until absorption; if state i is absorbing, L(i) is zero.


See also: dtmcexps.

EXAMPLE

Let us consider a 4-states pure birth continuous process where the transition rate from state i to state i+1 is \lambda_i = i \lambda (i=1, 2, 3), with \lambda = 0.5. The following code computes the expected sojourn time for each state i, given initial occupancy probabilities {\bf \pi}_0=[1, 0, 0, 0].

 lambda = 0.5;
 N = 4;
 b = lambda*[1:N-1];
 d = zeros(size(b));
 Q = ctmcbd(b,d);
 t = linspace(0,10,100);
 p0 = zeros(1,N); p0(1)=1;
 L = zeros(length(t),N);
 for i=1:length(t)
   L(i,:) = ctmcexps(Q,t(i),p0);
 endfor
 plot( t, L(:,1), ";State 1;", "linewidth", 2, ...
       t, L(:,2), ";State 2;", "linewidth", 2, ...
       t, L(:,3), ";State 3;", "linewidth", 2, ...
       t, L(:,4), ";State 4;", "linewidth", 2 );
 legend("location","northwest"); legend("boxoff");
 xlabel("Time");
 ylabel("Expected sojourn time");

3.2.4 Time-Averaged Expected Sojourn Times

Function File: M = ctmctaexps (Q, t, p0)
Function File: M = ctmctaexps (Q, p0)

Compute the time-averaged sojourn time M(i), defined as the fraction of the time interval [0,t] (or until absorption) spent in state i, assuming that the state occupancy probabilities at time 0 are p.

INPUTS

Q(i,j)

Infinitesimal generator matrix. Q(i,j) is the transition rate from state i to state j, 1 ≤ i,j ≤ N, i \neq j. The matrix Q must also satisfy the condition \sum_{j=1}^N Q_{ij} = 0

t

Time. If omitted, the results are computed until absorption.

p0(i)

initial state occupancy probabilities. p0(i) is the probability that the system is in state i at time 0, i = 1, …, N

OUTPUTS

M(i)

When called with three arguments, M(i) is the expected fraction of the interval [0,t] spent in state i assuming that the state occupancy probability at time zero is p. When called with two arguments, M(i) is the expected fraction of time until absorption spent in state i; in this case the mean time to absorption is sum(M).


See also: ctmcexps.

EXAMPLE

 lambda = 0.5;
 N = 4;
 birth = lambda*linspace(1,N-1,N-1);
 death = zeros(1,N-1);
 Q = diag(birth,1)+diag(death,-1);
 Q -= diag(sum(Q,2));
 t = linspace(1e-5,30,100);
 p = zeros(1,N); p(1)=1;
 M = zeros(length(t),N);
 for i=1:length(t)
   M(i,:) = ctmctaexps(Q,t(i),p);
 endfor
 clf;
 plot(t, M(:,1), ";State 1;", "linewidth", 2, ...
      t, M(:,2), ";State 2;", "linewidth", 2, ...
      t, M(:,3), ";State 3;", "linewidth", 2, ...
      t, M(:,4), ";State 4 (absorbing);", "linewidth", 2 );
 legend("location","east"); legend("boxoff");
 xlabel("Time");
 ylabel("Time-averaged Expected sojourn time");

3.2.5 Mean Time to Absorption

Function File: t = ctmcmtta (Q, p)

Compute the Mean-Time to Absorption (MTTA) of the CTMC described by the infinitesimal generator matrix Q, starting from initial occupancy probabilities p. If there are no absorbing states, this function fails with an error.

INPUTS

Q(i,j)

N \times N infinitesimal generator matrix. Q(i,j) is the transition rate from state i to state j, i \neq j. The matrix Q must satisfy the condition \sum_{j=1}^N Q_{i j} = 0

p(i)

probability that the system is in state i at time 0, for each i=1, …, N

OUTPUTS

t

Mean time to absorption of the process represented by matrix Q. If there are no absorbing states, this function fails.

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998.

See also: ctmcexps.

EXAMPLE

Let us consider a simple model of redundant disk array. We assume that the array is made of 5 independent disks and can tolerate up to 2 disk failures without losing data. If three or more disks break, the array is dead and unrecoverable. We want to estimate the Mean-Time-To-Failure (MTTF) of the disk array.

We model this system as a 4 states continuous Markov chain with state space { 2, 3, 4, 5 }. In state i there are exactly i active (i.e., non failed) disks; state 2 is absorbing. Let \mu be the failure rate of a single disk. The system starts in state 5 (all disks are operational). We use a pure death process, where the death rate from state i to state i-1 is \mu i, for i = 3, 4, 5).

The MTTF of the disk array is the MTTA of the Markov Chain, and can be computed as follows:

 mu = 0.01;
 death = [ 3 4 5 ] * mu;
 birth = 0*death;
 Q = ctmcbd(birth,death);
 t = ctmcmtta(Q,[0 0 0 1])
    ⇒ t = 78.333

3.2.6 First Passage Times

Function File: M = ctmcfpt (Q)
Function File: m = ctmcfpt (Q, i, j)

Compute mean first passage times for an irreducible continuous-time Markov chain.

INPUTS

Q(i,j)

Infinitesimal generator matrix. Q is a N \times N square matrix where Q(i,j) is the transition rate from state i to state j, for 1 ≤ i, j ≤ N, i \neq j. Transition rates must be nonnegative, and \sum_{j=1}^N Q_{i j} = 0

i

Initial state.

j

Destination state.

OUTPUTS

M(i,j)

average time before state j is visited for the first time, starting from state i. We let M(i,i) = 0.

m

m is the average time before state j is visited for the first time, starting from state i.


See also: ctmcmtta.


Next: , Previous: , Up: Top   [Contents][Index]

4 Single Station Queueing Systems

Single Station Queueing Systems contain a single station, and can usually be analyzed easily. The queueing package contains functions for handling the following types of queues:


4.1 The M/M/1 System

The M/M/1 system contains a single server connected to an unbounded FCFS queue. Requests arrive according to a Poisson process with rate \lambda; the service time is exponentially distributed with average service rate \mu. The system is stable if \lambda < \mu.

Function File: [U, R, Q, X, p0] = qsmm1 (lambda, mu)

Compute utilization, response time, average number of requests and throughput for a M/M/1 queue.

INPUTS

lambda

Arrival rate (lambda ≥ 0).

mu

Service rate (mu > lambda).

OUTPUTS

U

Server utilization

R

Server response time

Q

Average number of requests in the system

X

Server throughput. If the system is ergodic (mu > lambda), we always have X = lambda

p0

Steady-state probability that there are no requests in the system.

lambda and mu can be vectors of the same size. In this case, the results will be vectors as well.

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, Section 6.3

See also: qsmmm, qsmminf, qsmmmk.


4.2 The M/M/m System

The M/M/m system is similar to the M/M/1 system, except that there are m \geq 1 identical servers connected to a shared FCFS queue. Thus, at most m requests can be served at the same time. The M/M/m system can be seen as a single server with load-dependent service rate \mu(n), which is a function of the number n of requests in the system:

mu(n) = min(m,n)*mu

where \mu is the service rate of each individual server.

Function File: [U, R, Q, X, p0, pm] = qsmmm (lambda, mu)
Function File: [U, R, Q, X, p0, pm] = qsmmm (lambda, mu, m)

Compute utilization, response time, average number of requests in service and throughput for a M/M/m queue, a queueing system with m identical servers connected to a single FCFS queue.

INPUTS

lambda

Arrival rate (lambda>0).

mu

Service rate (mu>lambda).

m

Number of servers (m ≥ 1). Default is m=1.

OUTPUTS

U

Service center utilization, U = \lambda / (m \mu).

R

Service center mean response time

Q

Average number of requests in the system

X

Service center throughput. If the system is ergodic, we will always have X = lambda

p0

Steady-state probability that there are 0 requests in the system

pm

Steady-state probability that an arriving request has to wait in the queue

lambda, mu and m can be vectors of the same size. In this case, the results will be vectors as well.

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, Section 6.5

See also: erlangc,qsmm1,qsmminf,qsmmmk.


4.3 The Erlang-B Formula

Function File: B = erlangb (A, m)

Compute the value of the Erlang-B formula E_B(A, m) giving the probability that an open system with m identical servers, arrival rate \lambda, individual service rate \mu and offered load A = \lambda / \mu has all servers busy.

INPUTS

A

Offered load, defined as A = \lambda / \mu where \lambda is the mean arrival rate and \mu the mean service rate of each individual server (real, A > 0).

m

Number of identical servers (integer, m ≥ 1). Default m = 1

OUTPUTS

B

The value E_B(A, m)

A or m can be vectors, and in this case, the results will be vectors as well.

REFERENCES

  • G. Zeng, Two common properties of the erlang-B function, erlang-C function, and Engset blocking function, Mathematical and Computer Modelling, Volume 37, Issues 12-13, June 2003, Pages 1287-1296

See also: qsmmm.


4.4 The Erlang-C Formula

Function File: C = erlangc (A, m)

Compute the steady-state probability E_C(A, m) that an open queueing system with m identical servers, infinite wating space, arrival rate \lambda, individual service rate \mu and offered load A = \lambda / \mu has all the servers busy.

INPUTS

A

Offered load. A = \lambda / \mu where \lambda is the mean arrival rate and \mu the mean service rate of each individual server (real, 0 < A < m).

m

Number of identical servers (integer, m ≥ 1). Default m = 1

OUTPUTS

B

The value E_C(A, m)

A or m can be vectors, and in this case, the results will be vectors as well.


See also: qsmmm.


4.5 The Engset Formula

Function File: B = engset (A, m, n)

Compute the Engset blocking probability P_b(A, m, n) for a system with a finite population of n users, m identical servers, no queue, individual service rate \mu, individual arrival rate \lambda (i.e., the time until a user tries to request service is exponentially distributed with mean 1 / \lambda), and offered load A = \lambda / \mu.

INPUTS

A

Offered load, defined as A = \lambda / \mu where \lambda is the mean arrival rate and \mu the mean service rate of each individual server (real, A > 0).

m

Number of identical servers (integer, m ≥ 1). Default m = 1

n

Number of requests (integer, n ≥ 1). Default n = 1

OUTPUTS

B

The value P_b(A, m, n)

A, m or n can be vectors, and in this case, the results will be vectors as well.


See also: erlangb, erlangc.


4.6 The M/M/inf System

The M/M/\infty system is a special case of M/M/m system with infinitely many identical servers (i.e., m = \infty). Each new request is always assigned to a new server, so that queueing never occurs. The M/M/\infty system is always stable.

Function File: [U, R, Q, X, p0] = qsmminf (lambda, mu)

Compute utilization, response time, average number of requests and throughput for a M/M/\infty queue.

The M/M/\infty system has an infinite number of identical servers; this kind of system is always stable for every arrival and service rates.

INPUTS

lambda

Arrival rate (lambda>0).

mu

Service rate (mu>0).

OUTPUTS

U

Traffic intensity (defined as \lambda/\mu). Note that this is different from the utilization, which in the case of M/M/\infty centers is always zero.

R

Service center response time.

Q

Average number of requests in the system (which is equal to the traffic intensity \lambda/\mu).

X

Throughput (which is always equal to X = lambda).

p0

Steady-state probability that there are no requests in the system

lambda and mu can be vectors of the same size. In this case, the results will be vectors as well.

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, Section 6.4

See also: qsmm1,qsmmm,qsmmmk.


4.7 The M/M/1/K System

In a M/M/1/K finite capacity system there is a single server, and there can be at most K jobs at any time (including the job currently in service), K > 1. If a new request tries to join the system when there are already K other requests, the request is lost. The queue has K-1 slots. The M/M/1/K system is always stable, regardless of the arrival and service rates.

Function File: [U, R, Q, X, p0, pK] = qsmm1k (lambda, mu, K)

Compute utilization, response time, average number of requests and throughput for a M/M/1/K finite capacity system. In a M/M/1/K queue there is a single server; the maximum number of requests in the system (including the request being served) is K, and the maximum queue length is K-1.

INPUTS

lambda

Arrival rate (lambda>0).

mu

Service rate (mu>0).

K

Maximum number of requests allowed in the system (K ≥ 1).

OUTPUTS

U

Service center utilization, which is defined as U = 1-p0

R

Service center response time

Q

Average number of requests in the system

X

Service center throughput

p0

Steady-state probability that there are no requests in the system

pK

Steady-state probability that there are K requests in the system (i.e., that the system is full)

lambda, mu and K can be vectors of the same size. In this case, the results will be vectors as well.


See also: qsmm1,qsmminf,qsmmm.


4.8 The M/M/m/K System

The M/M/m/K finite capacity system is similar to the M/M/1/k system except that the number of servers is m, where 1 \leq m \leq K. The queue has K-m slots. The M/M/m/K system is always stable.

Function File: [U, R, Q, X, p0, pK] = qsmmmk (lambda, mu, m, K)

Compute utilization, response time, average number of requests and throughput for a M/M/m/K finite capacity system. In a M/M/m/K system there are m \geq 1 identical service centers sharing a fixed-capacity queue. At any time, at most K ≥ m requests can be in the system, including those being served. The maximum queue length is K-m. This function generates and solves the underlying CTMC.

INPUTS

lambda

Arrival rate (lambda>0)

mu

Service rate (mu>0)

m

Number of servers (m ≥ 1)

K

Maximum number of requests allowed in the system, including those being served (Km)

OUTPUTS

U

Service center utilization

R

Service center response time

Q

Average number of requests in the system

X

Service center throughput

p0

Steady-state probability that there are no requests in the system.

pK

Steady-state probability that there are K requests in the system (i.e., probability that the system is full).

lambda, mu, m and K can be either scalars, or vectors of the same size. In this case, the results will be vectors as well.

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, Section 6.6

See also: qsmm1,qsmminf,qsmmm.


4.9 The Asymmetric M/M/m System

The Asymmetric M/M/m system contains m servers connected to a single queue. Differently from the M/M/m system, in the asymmetric M/M/m each server may have a different service time.

Function File: [U, R, Q, X] = qsammm (lambda, mu)

Compute approximate utilization, response time, average number of requests in service and throughput for an asymmetric M/M/m queue. In this type of system there are m different servers connected to a single queue. Each server has its own (possibly different) service rate. If there is more than one server available, requests are routed to a randomly-chosen one.

INPUTS

lambda

Arrival rate (lambda>0)

mu

mu(i) is the service rate of server i, 1 ≤ i ≤ m. The system must be ergodic (lambda < sum(mu)).

OUTPUTS

U

Approximate service center utilization, U = \lambda / ( \sum_i \mu_i ).

R

Approximate service center response time

Q

Approximate number of requests in the system

X

Approximate system throughput. If the system is ergodic, X = lambda

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998

See also: qsmmm.


4.10 The M/G/1 System

Function File: [U, R, Q, X, p0] = qsmg1 (lambda, xavg, x2nd)

Compute utilization, response time, average number of requests and throughput for a M/G/1 system. The service time distribution is described by its mean xavg, and by its second moment x2nd. The computations are based on results from L. Kleinrock, Queuing Systems, Wiley, Vol 2, and Pollaczek-Khinchine formula.

INPUTS

lambda

Arrival rate

xavg

Average service time

x2nd

Second moment of service time distribution

OUTPUTS

U

Service center utilization

R

Service center response time

Q

Average number of requests in the system

X

Service center throughput

p0

Probability that there is not any request at system

lambda, xavg, t2nd can be vectors of the same size. In this case, the results will be vectors as well.


See also: qsmh1.


4.11 The M/H_m/1 System

Function File: [U, R, Q, X, p0] = qsmh1 (lambda, mu, alpha)

Compute utilization, response time, average number of requests and throughput for a M/H_m/1 system. In this system, the customer service times have hyper-exponential distribution:

       ___ m
       \
B(x) =  >  alpha(j) * (1-exp(-mu(j)*x))   x>0
       /__ 
           j=1

where \alpha_j is the probability that the request is served at phase j, in which case the average service rate is \mu_j. After completing service at phase j, for some j, the request exits the system.

INPUTS

lambda

Arrival rate

mu

mu(j) is the phase j service rate. The total number of phases m is length(mu).

alpha

alpha(j) is the probability that a request is served at phase j. alpha must have the same size as mu.

OUTPUTS

U

Service center utilization

R

Service center response time

Q

Average number of requests in the system

X

Service center throughput


5 Queueing Networks


5.1 Introduction to QNs

Queueing Networks (QN) are a simple modeling notation that can be used to analyze many kinds of systems. In its simplest form, a QN is made of K service centers; center k has a queue connected to m_k (usually identical) servers. Arriving customers (requests) join the queue if there is at least one slot available. Requests are served according to a (de)queueing policy (e.g., FIFO). After service completes, requests leave the server and can join another queue or exit from the system.

Service centers where m_k = \infty are called delay centers or infinite servers. In this kind of centers, there is always one available server, so that queueing never occurs.

Requests join the queue according to a queueing policy, such as:

FCFS

First-Come-First-Served

LCFS-PR

Last-Come-First-Served, Preemptive Resume

PS

Processor Sharing

IS

Infinite Server (m_k = \infty).

Queueing networks can be open or closed. In open networks there is an infinite population of requests; new customers are generated outside the system, and eventually leave the network. In closed networks there is a fixed population of request that never leave the system.

Queueing models can have a single request class (single class models), meaning that all requests behave in the same way (e.g., they spend the same average time on each particular server). In multiple class models there are multiple request classes, each with its own parameters (e.g., with different service times or different routing probabilities). Furthermore, in multiclass models there can be open and closed chains of requests at the same time.

A particular class of QN models, product-form networks, is of particular interest. Product-form networks fulfill the following assumptions:

  • The network can consist of open and closed job classes.
  • The following queueing disciplines are allowed: FCFS, PS, LCFS-PR and IS.
  • Service times for FCFS nodes must be exponentially distributed and class-independent. Service centers at PS, LCFS-PR and IS nodes can have any kind of service time distribution with a rational Laplace transform. Furthermore, for PS, LCFS-PR and IS nodes, different classes of customers can have different service times.
  • The service rate of an FCFS node is only allowed to depend on the number of jobs at this node; in a PS, LCFS-PR and IS node the service rate for a particular job class can also depend on the number of jobs of that class at the node.
  • In open networks two kinds of arrival processes are allowed: i) the arrival process is Poisson, with arrival rate \lambda that can depend on the number of jobs in the network. ii) the arrival process consists of C independent Poisson arrival streams where the C job sources are assigned to the C chains; the arrival rate can be load dependent.

Product-form networks are attractive because steady-state performance measures can be efficiently computed.


5.2 Single Class Models

In single class models, all requests are indistinguishable and belong to the same class. This means that every request has the same average service time, and all requests move through the system with the same routing probabilities.

Model Inputs

lambda_k

(Open models only) External arrival rate to service center k.

lambda

(Open models only) Overall external arrival rate to the system as a whole: \lambda = \sum_k \lambda_k.

N

(Closed models only) Total number of requests in the system.

S_k

Average service time. S_k is the average service time at center k. In other words, S_k is the average time elapsed from service start to service completion at center k.

P_{i, j}

Routing probability matrix. {\bf P} = [P_{i, j}] is a K \times K matrix where P_{i, j} is the probability that a request completing service at server i will move directly to server j. The probability that a request leaves the system after being served at center i is 1-\sum_{j=1}^K P_{i, j}.

V_k

Mean number of visits to center k (also called visit ratio or relative arrival rate).

Model Outputs

U_k

Service center utilization. U_k is center k utilization. The utilization is defined as the fraction of time in which the resource is busy (i.e., the server is processing requests). If center k is a single-server or multiserver node, then 0 ≤ U_k ≤ 1. If center k is an infinite server node (delay center), then U_k denotes the traffic intensity and is defined as U_k = X_k S_k; in this case the utilization may be greater than one.

R_k

Average response time. R_k is the average response time of center k. The average response time is defined as the average time between the arrival of a request in the queue and service completion of the same request.

Q_k

Average number of customers. Q_k is the average number of requests in center k. This includes both the requests in the queue, and those being served.

X_k

Throughput. X_k is center k throughput. The throughput is the ratio of job completions over time, i.e., the average number of jobs completed over a fixed time interval.

Given the output parameters above, additional performance measures can be computed:

X

System throughput, X = X_k / V_k for any k for which V_k \neq 0

R

System response time, R = \sum_{k=1}^K R_k V_k

Q

Average number of requests in the system, Q = \sum_{k=1} Q_k; for closed systems, this can be written as Q = N-XZ;

For open, single class models, the scalar \lambda denotes the external arrival rate of requests to the system. The average number of visits V_j satisfy the following equation:

                  K
                 ___
                \
V_j = P_(0, j) + >   V_i P_(i, j)    j=1,...,K
                /___
                 i=1

where P_{0, j} is the probability that an external request goes to center j. If we denote with \lambda_j the external arrival rate to center j, and \lambda = \sum_j \lambda_j the overall external arrival rate, then P_{0, j} = \lambda_j / \lambda.

For closed models, the visit ratios satisfy the following equation:

/
|         K
|        ___
|       \
| V_j =  >   V_i P_(i, j)     j=1,...,K
|       /___
|        i=1
|
| V_r = 1                     for a selected reference station r
\

Note that the set of traffic equations V_j = \sum_{i=1}^K V_i P_{i, j} alone can only be solved up to a multiplicative constant; to get a unique solution we impose an additional constraint V_r = 1 for some 1 ≤ r ≤ K. This constraint is equivalent to defining station r as the reference station; the default is r=1, see doc-qncsvisits. A job that returns to the reference station is assumed to have completed its activity cycle. The network throughput is set to the throughput of the reference station.

Function File: V = qncsvisits (P)
Function File: V = qncsvisits (P, r)

Compute the mean number of visits to the service centers of a single class, closed network with K service centers.

INPUTS

P(i,j)

probability that a request which completed service at center i is routed to center j (K \times K matrix). For closed networks it must hold that sum(P,2)==1. The routing graph must be strongly connected, meaning that each node must be reachable from every other node.

r

Index of the reference station, r \in {1, …, K}; Default r=1. The traffic equations are solved by imposing the condition V(r) = 1. A request returning to the reference station completes its activity cycle.

OUTPUTS

V(k)

average number of visits to service center k, assuming r as the reference station.

Function File: V = qnosvisits (P, lambda)

Compute the average number of visits to the service centers of a single class open Queueing Network with K service centers.

INPUTS

P(i,j)

is the probability that a request which completed service at center i is routed to center j (K \times K matrix).

lambda(k)

external arrival rate to center k.

OUTPUTS

V(k)

average number of visits to server k.

EXAMPLE

qn_closed_single

Figure 5.1: Closed network with a single class of requests

Figure 5.1 shows a closed queueing network with a single class of requests. The network has three service centers, labeled CPU, Disk1 and Disk2, and is known as a central server model of a computer system. Requests spend some time at the CPU, which is represented by a PS (Processor Sharing) node. After that, requests are routed to Disk1 with probability 0.3, and to Disk2 with probability 0.7. Both Disk1 and Disk2 are FCFS nodes.

If we label the servers as CPU=1, Disk1=2, Disk2=3, we can define the routing matrix as follows:

    / 0  0.3  0.7 \
P = | 1  0    0   |
    \ 1  0    0   /

The visit ratios V, using station 1 as the reference station, can be computed with:

 P = [0 0.3 0.7; ...
      1 0   0  ; ...
      1 0   0  ];
 V = qncsvisits(P)
   ⇒ V = 1.00000   0.30000   0.70000

EXAMPLE

qn_open_single

Figure 5.2: Open Queueing Network with a single class of requests

Figure 5.2 shows a open QN with a single class of requests. The network has the same structure as the one in Figure 5.1, with the difference that here we have a stream of jobs arriving from outside the system, at a rate \lambda. After service completion at the CPU, a job can leave the system with probability 0.2, or be transferred to other nodes with the probabilities shown in the figure.

The routing matrix is

    / 0  0.3  0.5 \
P = | 1  0    0   |
    \ 1  0    0   /

If we let \lambda = 1.2, we can compute the visit ratios V as follows:

 p = 0.3;
 lambda = 1.2
 P = [0 0.3 0.5; ...
      1 0   0  ; ...
      1 0   0  ];
 V = qnosvisits(P,[1.2 0 0])
   ⇒ V = 5.0000   1.5000   2.5000

Function qnosvisits expects a vector with K elements as a second parameter, for open networks only. The vector contains the arrival rates at each individual node; since in our example external arrivals exist only for node S_1 with rate \lambda = 1.2, the second parameter is [1.2, 0, 0].

5.2.1 Open Networks

Jackson networks satisfy the following conditions:

  • There is only one job class in the network; the total number of jobs in the system is unbounded.
  • There are K service centers in the network. Each service center may have Poisson arrivals from outside the system. A job can leave the system from any node.
  • Arrival rates as well as routing probabilities are independent from the number of nodes in the network.
  • External arrivals and service times at the service centers are exponentially distributed, and in general can be load-dependent.
  • Service discipline at each node is FCFS

We define the joint probability vector \pi(n_1, …, n_K) as the steady-state probability that there are n_k requests at service center k, for all k=1, …, N. Jackson networks have the property that the joint probability is the product of the marginal probabilities \pi_k:

joint_prob = prod( pi )

where \pi_k(n_k) is the steady-state probability that there are n_k requests at service center k.

Function File: [U, R, Q, X] = qnos (lambda, S, V)
Function File: [U, R, Q, X] = qnos (lambda, S, V, m)

Analyze open, single class BCMP queueing networks with K service centers.

This function works for a subset of BCMP single-class open networks satisfying the following properties:

  • The allowed service disciplines at network nodes are: FCFS, PS, LCFS-PR, IS (infinite server);
  • Service times are exponentially distributed and load-independent;
  • Center k can consist of m(k) ≥ 1 identical servers.
  • Routing is load-independent

INPUTS

lambda

Overall external arrival rate (lambda>0).

S(k)

average service time at center k (S(k)>0).

V(k)

average number of visits to center k (V(k) ≥ 0).

m(k)

number of servers at center i. If m(k) < 1, enter k is a delay center (IS); otherwise it is a regular queueing center with m(k) servers. Default is m(k) = 1 for all k.

OUTPUTS

U(k)

If k is a queueing center, U(k) is the utilization of center k. If k is an IS node, then U(k) is the traffic intensity defined as X(k)*S(k).

R(k)

center k average response time.

Q(k)

average number of requests at center k.

X(k)

center k throughput.

REFERENCES

  • G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998

See also: qnopen,qnclosed,qnosvisits.

From the results computed by this function, it is possible to derive other quantities of interest as follows:

  • System Response Time: The overall system response time can be computed as R_s = dot(V,R);
  • Average number of requests: The average number of requests in the system can be computed as: Q_avg = sum(Q)

EXAMPLE

 lambda = 3;
 V = [16 7 8];
 S = [0.01 0.02 0.03];
 [U R Q X] = qnos( lambda, S, V );
 R_s = dot(R,V) # System response time
 N = sum(Q) # Average number in system
-| R_s =  1.4062
-| N =  4.2186

5.2.2 Closed Networks

Function File: [U, R, Q, X, G] = qncsmva (N, S, V)
Function File: [U, R, Q, X, G] = qncsmva (N, S, V, m)
Function File: [U, R, Q, X, G] = qncsmva (N, S, V, m, Z)

Analyze closed, single class queueing networks using the exact Mean Value Analysis (MVA) algorithm.

The following queueing disciplines are supported: FCFS, LCFS-PR, PS and IS (Infinite Server). This function supports fixed-rate service centers or multiple server nodes. For general load-dependent service centers, use the function qncsmvald instead.

Additionally, the normalization constant G(n), n=0, …, N is computed; G(n) can be used in conjunction with the BCMP theorem to compute steady-state probabilities.

INPUTS

N

Population size (number of requests in the system, N ≥ 0). If N == 0, this function returns U = R = Q = X = 0

S(k)

mean service time at center k (S(k) ≥ 0).

V(k)

average number of visits to service center k (V(k) ≥ 0).

Z

External delay for customers (Z ≥ 0). Default is 0.

m(k)

number of servers at center k (if m is a scalar, all centers have that number of servers). If m(k) < 1, center k is a delay center (IS); otherwise it is a regular queueing center (FCFS, LCFS-PR or PS) with m(k) servers. Default is m(k) = 1 for all k (each service center has a single server).

OUTPUTS

U(k)

If k is a FCFS, LCFS-PR or PS node (m(k) ≥ 1), then U(k) is the utilization of center k, 0 ≤ U(k) ≤ 1. If k is an IS node (m(k) < 1), then U(k) is the traffic intensity defined as X(k)*S(k). In this case the value of U(k) may be greater than one.

R(k)

center k response time. The Residence Time at center k is R(k) * V(k). The system response time Rsys can be computed either as Rsys = N/Xsys - Z or as Rsys = dot(R,V)

Q(k)

average number of requests at center k. The number of requests in the system can be computed either as sum(Q), or using the formula N-Xsys*Z.

X(k)

center K throughput. The system throughput Xsys can be computed as Xsys = X(1) / V(1)

G(n)

Normalization constants. G(n+1) contains the value of the normalization constant G(n), n=0, …, N as array indexes in Octave start from 1. G(n) can be used in conjunction with the BCMP theorem to compute steady-state probabilities.

NOTES

In presence of load-dependent servers (i.e., if m(k)>1 for some k), the MVA algorithm is known to be numerically unstable. Generally, this issue manifests itself as negative values for the response times or utilizations. This is not a problem of the queueing toolbox, but of the MVA algorithm, and has currently no known solution. This function prints a warning if numerical problems are detected; the warning can be disabled with the command warning("off", "qn:numerical-instability").

REFERENCES

  • M. Reiser and S. S. Lavenberg, Mean-Value Analysis of Closed Multichain Queuing Networks, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313–322. 10.1145/322186.322195

This implementation is described in R. Jain , The Art of Computer Systems Performance Analysis, Wiley, 1991, p. 577. Multi-server nodes are treated according to G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, Section 8.2.1, "Single Class Queueing Networks".


See also: qncsmvald,qncscmva.

EXAMPLE

 S = [ 0.125 0.3 0.2 ];
 V = [ 16 10 5 ];
 N = 20;
 m = ones(1,3);
 Z = 4;
 [U R Q X] = qncsmva(N,S,V,m,Z);
 X_s = X(1)/V(1); # System throughput
 R_s = dot(R,V); # System response time
 printf("\t    Util      Qlen     RespT      Tput\n");
 printf("\t--------  --------  --------  --------\n");
 for k=1:length(S)
   printf("Dev%d\t%8.4f  %8.4f  %8.4f  %8.4f\n", k, U(k), Q(k), R(k), X(k) );
 endfor
 printf("\nSystem\t          %8.4f  %8.4f  %8.4f\n\n", N-X_s*Z, R_s, X_s );
Function File: [U, R, Q, X] = qncsmvald (N, S, V)
Function File: [U, R, Q, X] = qncsmvald (N, S, V, Z)

Mean Value Analysis algorithm for closed, single class queueing networks with K service centers and load-dependent service times. This function supports FCFS, LCFS-PR, PS and IS nodes. For networks with only fixed-rate centers and multiple-server nodes, the function qncsmva is more efficient.

INPUTS

N

Population size (number of requests in the system, N ≥ 0). If N == 0, this function returns U = R = Q = X = 0

S(k,n)

mean service time at center k where there are n requests, 1 ≤ n ≤ N. S(k,n) = 1 / \mu_{k}(n), where \mu_{k}(n) is the service rate of center k when there are n requests.

V(k)

average number of visits to service center k (V(k) ≥ 0).

Z

external delay ("think time", Z ≥ 0); default 0.

OUTPUTS

U(k)

utilization of service center k. The utilization is defined as the probability that service center k is not empty, that is, U_k = 1-\pi_k(0) where \pi_k(0) is the steady-state probability that there are 0 jobs at service center k.

R(k)

response time on service center k.

Q(k)

average number of requests in service center k.

X(k)

throughput of service center k.

NOTES

In presence of load-dependent servers, the MVA algorithm is known to be numerically unstable. Generally this problem manifests itself as negative response times or utilization.

REFERENCES

  • M. Reiser and S. S. Lavenberg, Mean-Value Analysis of Closed Multichain Queuing Networks, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313–322. 10.1145/322186.322195

This implementation is described in G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, Section 8.2.4.1, “Networks with Load-Dependent Service: Closed Networks”.


See also: qncsmva.

Function File: [U, R, Q, X] = qncscmva (N, S, Sld, V)
Function File: [U, R, Q, X] = qncscmva (N, S, Sld, V, Z)

Conditional MVA (CMVA) algorithm, a numerically stable variant of MVA. This function supports a network of M ≥ 1 service centers and a single delay center. Servers 1, …, M-1 are load-independent; server M is load-dependent.

INPUTS

N

Number of requests in the system, N ≥ 0. If N == 0, this function returns U = R = Q = X = 0

S(k)

mean service time on server k = 1, …, M-1 (S(k) > 0). If there are no fixed-rate servers, then S = []

Sld(n)

inverse service rate at server M (the load-dependent server) when there are n requests, n=1, …, N. Sld(n) = 1 / \mu(n).

V(k)

average number of visits to service center k=1, …, M, where V(k) ≥ 0. V(1:M-1) are the visit rates to the fixed rate servers; V(M) is the visit rate to the load dependent server.

Z

External delay for customers (Z ≥ 0). Default is 0.

OUTPUTS

U(k)

center k utilization (k=1, …, M)

R(k)

response time of center k (k=1, …, M). The system response time Rsys can be computed as Rsys = N/Xsys - Z

Q(k)

average number of requests at center k (k=1, …, M).

X(k)

center k throughput (k=1, …, M).

REFERENCES

  • G. Casale. A note on stable flow-equivalent aggregation in closed networks. Queueing Syst. Theory Appl., 60:193–-202, December 2008, 10.1007/s11134-008-9093-6
Function File: [U, R, Q, X] = qncsmvaap (N, S, V)
Function File: [U, R, Q, X] = qncsmvaap (N, S, V, m)
Function File: [U, R, Q, X] = qncsmvaap (N, S, V, m, Z)
Function File: [U, R, Q, X] = qncsmvaap (N, S, V, m, Z, tol)
Function File: [U, R, Q, X] = qncsmvaap (N, S, V, m, Z, tol, iter_max)

Analyze closed, single class queueing networks using the Approximate Mean Value Analysis (MVA) algorithm. This function is based on approximating the number of customers seen at center k when a new request arrives as Q_k(N) \times (N-1)/N. This function only handles single-server and delay centers; if your network contains general load-dependent service centers, use the function qncsmvald instead.

INPUTS

N

Population size (number of requests in the system, N > 0).

S(k)

mean service time on server k (S(k)>0).

V(k)

average number of visits to service center k (V(k) ≥ 0).

m(k)

number of servers at center k (if m is a scalar, all centers have that number of servers). If m(k) < 1, center k is a delay center (IS); if m(k) == 1, center k is a regular queueing center (FCFS, LCFS-PR or PS) with one server (default). This function does not support multiple server nodes (m(k) > 1).

Z

External delay for customers (Z ≥ 0). Default is 0.

tol

Stopping tolerance. The algorithm stops when the maximum relative difference between the new and old value of the queue lengths Q becomes less than the tolerance. Default is 10^{-5}.

iter_max

Maximum number of iterations (iter_max>0. The function aborts if convergenge is not reached within the maximum number of iterations. Default is 100.

OUTPUTS

U(k)

If k is a FCFS, LCFS-PR or PS node (m(k) == 1), then U(k) is the utilization of center k. If k is an IS node (m(k) < 1), then U(k) is the traffic intensity defined as X(k)*S(k).

R(k)

response time at center k. The system response time Rsys can be computed as Rsys = N/Xsys - Z

Q(k)

average number of requests at center k. The number of requests in the system can be computed either as sum(Q), or using the formula N-Xsys*Z.

X(k)

center k throughput. The system throughput Xsys can be computed as Xsys = X(1) / V(1)

REFERENCES

This implementation is based on Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 6.4.2.2 ("Approximate Solution Techniques").


See also: qncsmva,qncsmvald.

According to the BCMP theorem, the state probability of a closed single class queueing network with K nodes and N requests can be expressed as:

n = [n1, … nK]; population vector
p = 1/G(N+1) \prod F(k,k);

Here \pi(n_1, …, n_K) is the joint probability of having n_k requests at node k, for all k=1, …, K; \sum_{k=1}^K n_k = N

The convolution algorithms computes the normalization constants {\bf G} = \left[G(0), …, G(N)\right] for single-class, closed networks with N requests. The normalization constants are returned as vector G=[G(1), … G(N+1)] where G(i+1) is the value of G(i) (remember that Octave uses 1-base vectors). The normalization constant can be used to compute all performance measures of interest (utilization, average response time and so on).

queueing implements the convolution algorithm, in the function qncsconv and qncsconvld. The first one supports single-station nodes, multiple-station nodes and IS nodes. The second one supports networks with general load-dependent service centers.

Function File: [U, R, Q, X, G] = qncsconv (N, S, V)
Function File: [U, R, Q, X, G] = qncsconv (N, S, V, m)

Analyze product-form, single class closed networks with K service centers using the convolution algorithm.

Load-independent service centers, multiple servers (M/M/m queues) and IS nodes are supported. For general load-dependent service centers, use qncsconvld instead.

INPUTS

N

Number of requests in the system (N>0).

S(k)

average service time on center k (S(k) ≥ 0).

V(k)

visit count of service center k (V(k) ≥ 0).

m(k)

number of servers at center k. If m(k) < 1, center k is a delay center (IS); if m(k) ≥ 1, center k it is a regular M/M/m queueing center with m(k) identical servers. Default is m(k) = 1 for all k.

OUTPUT

U(k)

center k utilization. For IS nodes, U(k) is the traffic intensity X(k) * S(k).

R(k)

average response time of center k.

Q(k)

average number of customers at center k.

X(k)

throughput of center k.

G(n)

Vector of normalization constants. G(n+1) contains the value of the normalization constant with n requests G(n), n=0, …, N.

NOTE

For a network with K service centers and N requests, this implementation of the convolution algorithm has time and space complexity O(NK).

REFERENCES

  • Jeffrey P. Buzen, Computational Algorithms for Closed Queueing Networks with Exponential Servers, Communications of the ACM, volume 16, number 9, September 1973, pp. 527–531. 10.1145/362342.362345

This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, pp. 313–317.


See also: qncsconvld.

EXAMPLE

The normalization constant G can be used to compute the steady-state probabilities for a closed single class product-form Queueing Network with K nodes and N requests. Let n = [n_1, …, n_K] be a valid population vector, \sum_{k=1}^K n_k = N. Then, the steady-state probability p(k) to have n(k) requests at service center k can be computed as:

 n = [1 2 0];
 N = sum(n); # Total population size
 S = [ 1/0.8 1/0.6 1/0.4 ];
 m = [ 2 3 1 ];
 V = [ 1 .667 .2 ];
 [U R Q X G] = qncsconv( N, S, V, m );
 p = [0 0 0]; # initialize p
 # Compute the probability to have n(k) jobs at service center k
 for k=1:3
   p(k) = (V(k)*S(k))^n(k) / G(N+1) * ...
          (G(N-n(k)+1) - V(k)*S(k)*G(N-n(k)) );
   printf("Prob( n(%d) = %d )=%f\n", k, n(k), p(k) );
 endfor
-| Prob( n(1) = 1 ) = 0.17975
-| Prob( n(2) = 2 ) = 0.48404
-| Prob( n(3) = 0 ) = 0.52779

(recall that G(N+1) represents G(N), since in Octave array indices start at one).

Function File: [U, R, Q, X, G] = qncsconvld (N, S, V)

Convolution algorithm for product-form, single-class closed queueing networks with K general load-dependent service centers.

This function computes steady-state performance measures for single-class, closed networks with load-dependent service centers using the convolution algorithm; the normalization constants are also computed. The normalization constants are returned as vector G=[G(1), …, G(N+1)] where G(i+1) is the value of G(i).

INPUTS

N

Number of requests in the system (N>0).

S(k,n)

mean service time at center k where there are n requests, 1 ≤ n ≤ N. S(k,n) = 1 / \mu_{k,n}, where \mu_{k,n} is the service rate of center k when there are n requests.

V(k)

visit count of service center k (V(k) ≥ 0). The length of V is the number of servers K in the network.

OUTPUT

U(k)

center k utilization.

R(k)

average response time at center k.

Q(k)

average number of requests in center k.

X(k)

center k throughput.

G(n)

Normalization constants (vector). G(n+1) corresponds to G(n), as array indexes in Octave start from 1.

REFERENCES

  • Herb Schwetman, Some Computational Aspects of Queueing Network Models, Technical Report CSD-TR-354, Department of Computer Sciences, Purdue University, February 1981 (revised).
  • M. Reiser, H. Kobayashi, On The Convolution Algorithm for Separable Queueing Networks, In Proceedings of the 1976 ACM SIGMETRICS Conference on Computer Performance Modeling Measurement and Evaluation (Cambridge, Massachusetts, United States, March 29–31, 1976). SIGMETRICS ’76. ACM, New York, NY, pp. 109–117. 10.1145/800200.806187

This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998, pp. 313–317. Function qncsconvld is slightly different from the version described in Bolch et al. because it supports general load-dependent centers (while the version in the book does not). The modification is in the definition of function F() in qncsconvld which has been made similar to function f_i defined in Schwetman, Some Computational Aspects of Queueing Network Models.


See also: qncsconv.

5.2.3 Non Product-Form QNs

Function File: [U, R, Q, X] = qncsmvablo (N, S, M, P )

Approximate MVA algorithm for closed queueing networks with blocking.

INPUTS

N

number of requests in the system. N must be strictly greater than zero, and less than the overall network capacity: 0 < N < sum(M).

S(k)

average service time on server k (S(k) > 0).

M(k)

capacity of center k. The capacity is the maximum number of requests in a service center, including the request in service (M(k) ≥ 1).

P(i,j)

probability that a request which completes service at server i will be transferred to server j.

OUTPUTS

U(k)

center k utilization.

R(k)

average response time of service center k.

Q(k)

average number of requests in service center k (including the request in service).

X(k)

center k throughput.

REFERENCES

  • Ian F. Akyildiz, Mean Value Analysis for Blocking Queueing Networks, IEEE Transactions on Software Engineering, vol. 14, n. 2, april 1988, pp. 418–428. 10.1109/32.4663

See also: qnopen, qnclosed.

Function File: [U, R, Q, X] = qnmarkov (lambda, S, C, P)
Function File: [U, R, Q, X] = qnmarkov (lambda, S, C, P, m)
Function File: [U, R, Q, X] = qnmarkov (N, S, C, P)
Function File: [U, R, Q, X] = qnmarkov (N, S, C, P, m)

Compute utilization, response time, average queue length and throughput for open or closed queueing networks with finite capacity. Blocking type is Repetitive-Service (RS). This function explicitly generates and solve the underlying Markov chain, and thus might require a large amount of memory.

More specifically, networks which can me analyzed by this function have the following properties:

  • There exists only a single class of customers.
  • The network has K service centers. Center k has m_k > 0 servers, and has a total (finite) capacity of C_k \geq m_k which includes both buffer space and servers. The buffer space at service center k is therefore C_k - m_k.
  • The network can be open, with external arrival rate to center k equal to \lambda_k, or closed with fixed population size N. For closed networks, the population size N must be strictly less than the network capacity: N < \sum_i C_i.
  • Average service times are load-independent.
  • P_{i, j} is the probability that requests completing execution at center i are transferred to center j, i \neq j. For open networks, a request may leave the system from any node i with probability 1-\sum_j P_{i, j}.
  • Blocking type is Repetitive-Service (RS). Service center j is saturated if the number of requests is equal to its capacity C_j. Under the RS blocking discipline, a request completing service at center i which is being transferred to a saturated server j is put back at the end of the queue of i and will receive service again. Center i then processes the next request in queue. External arrivals to a saturated servers are dropped.

INPUTS

lambda(k)
N

If the first argument is a vector lambda, it is considered to be the external arrival rate lambda(k) ≥ 0 to service center k of an open network. If the first argument is a scalar, it is considered as the population size N of a closed network; in this case N must be strictly less than the network capacity: N < sum(C).

S(k)

average service time at service center k

C(k)

capacity of service center k. The capacity includes both the buffer and server space m(k). Thus the buffer space is C(k)-m(k).

P(i,j)

transition probability from service center i to service center j.

m(k)

number of servers at service center k. Note that m(k) ≥ C(k) for each k. If m is omitted, all service centers are assumed to have a single server (m(k) = 1 for all k).

OUTPUTS

U(k)

center k utilization.

R(k)

response time on service center k.

Q(k)

average number of customers in the service center k, including the request in service.

X(k)

throughput of service center k.

NOTES

The space complexity of this implementation is O(\prod_{k=1}^K (C_k + 1)^2). The time complexity is dominated by the time needed to solve a linear system with \prod_{k=1}^K (C_k + 1) unknowns.


5.3 Multiple Class Models

In multiple class queueing models, we assume that there exist C different classes of requests. Each request from class c spends on average time S_{c, k} in service at center k. For open models, we denote with {\bf \lambda} = \lambda_{c, k} the arrival rates, where \lambda_{c, k} is the external arrival rate of class c requests at center k. For closed models, we denote with {\bf N} = \left[N_1, …, N_C\right] the population vector, where N_c is the number of class c requests in the system.

The transition probability matrix for multiple class networks is a C \times K \times C \times K matrix {\bf P} = [P_{r, i, s, j}] where P_{r, i, s, j} is the probability that a class r request which completes service at center i will join server j as a class s request.

Model input and outputs can be adjusted by adding additional indexes for the customer classes.

Model Inputs

lambda_{c, k}

(open networks) External arrival rate of class-c requests to service center k

lambda

(open networks) Overall external arrival rate to the whole system: \lambda = \sum_c \sum_k \lambda_{c, k}

N_c

(closed networks) Number of class c requests in the system.

S_{c, k}

Average service time. S_{c, k} is the average service time on service center k for class c requests.

P_{r, i, s, j}

Routing probability matrix. {\bf P} = [P_{r, i, s, j}] is a C \times K \times C \times K matrix such that P_{r, i, s, j} is the probability that a class r request which completes service at server i will move to server j as a class s request.

V_{c, k}

Mean number of visits of class c requests to center k.

Model Outputs

U_{c, k}

Utilization of service center k by class c requests. The utilization is defined as the fraction of time in which the resource is busy (i.e., the server is processing requests). If center k is a single-server or multiserver node, then 0 ≤ U_{c, k} ≤ 1. If center k is an infinite server node (delay center), then U_{c, k} denotes the traffic intensity and is defined as U_{c, k} = X_{c, k} S_{c, k}; in this case the utilization may be greater than one.

R_{c, k}

Average response time experienced by class c requests on service center k. The average response time is defined as the average time between the arrival of a customer in the queue, and the completion of service.

Q_{c, k}

Average number of class c requests on service center k. This includes both the requests in the queue, and the request being served.

X_{c, k}

Throughput of service center k for class c requests. The throughput is defined as the rate of completion of class c requests.

It is possible to define aggregate performance measures as follows:

U_k

Utilization of service center k: Uk = sum(U,k);

R_c

System response time for class c requests: Rc = sum( V.*R, 1 );

Q_c

Average number of class c requests in the system: Qc = sum( Q, 2 );

X_c

Class c throughput: X(c) = X(c,k) ./ V(c,k); for any k for which V(c,k) != 0

For closed networks, we can define the visit ratios V_{s, j} for class s customers at service center j as follows:

V_sj = sum_r sum_i V_ri P_risj s=1,...,C, j=1,...,K V_s r_s = 1 s=1,...,C

where r_s is the class s reference station. Similarly to single class models, the traffic equation for closed multiclass networks can be solved up to multiplicative constants unless we choose one reference station for each closed chain class and set its visit ratio to 1.

For open networks the traffic equations are as follows:

V_sj = P_0sj + sum_r sum_i V_ri P_risj s=1,...,C, j=1,...,K

where P_{0, s, j} is the probability that an external arrival goes to service center j as a class-s request. If \lambda_{s, j} is the external arrival rate of class s requests to service center j, and \lambda = \sum_s \sum_j \lambda_{s, j} is the overall external arrival rate, then P_{0, s, j} = \lambda_{s, j} / \lambda.

Function File: [V ch] = qncmvisits (P)
Function File: [V ch] = qncmvisits (P, r)

Compute the average number of visits to the service centers of a closed multiclass network with K service centers and C customer classes.

INPUTS

P(r,i,s,j)

probability that a class r request which completed service at center i is routed to center j as a class s request. Class switching is allowed.

r(c)

index of class c reference station, r(c) \in {1, …, K}, 1 ≤ c ≤ C. The class c visit count to server r(c) (V(c,r(c))) is conventionally set to 1. The reference station serves two purposes: (i) its throughput is assumed to be the system throughput, and (ii) a job returning to the reference station is assumed to have completed one cycle. Default is to consider station 1 as the reference station for all classes.

OUTPUTS

V(c,i)

number of visits of class c requests at center i.

ch(c)

chain number that class c belongs to. Different classes can belong to the same chain. Chains are numbered sequentially starting from 1 (1, 2, …). The total number of chains is max(ch).

Function File: V = qnomvisits (P, lambda)

Compute the visit ratios to the service centers of an open multiclass network with K service centers and C customer classes.

INPUTS

P(r,i,s,j)

probability that a class r request which completed service at center i is routed to center j as a class s request. Class switching is supported.

lambda(r,i)

external arrival rate of class r requests to center i.

OUTPUTS

V(r,i)

visit ratio of class r requests at center i.

5.3.1 Open Networks

Function File: [U, R, Q, X] = qnom (lambda, S, V)
Function File: [U, R, Q, X] = qnom (lambda, S, V, m)
Function File: [U, R, Q, X] = qnom (lambda, S, P)
Function File: [U, R, Q, X] = qnom (lambda, S, P, m)

Exact analysis of open, multiple-class BCMP networks. The network can be made of single-server queueing centers (FCFS, LCFS-PR or PS) or delay centers (IS). This function assumes a network with K service centers and C customer classes.

INPUTS

lambda(c)

If this function is invoked as qnom(lambda, S, V, …), then lambda(c) is the external arrival rate of class c customers (lambda(c) ≥ 0). If this function is invoked as qnom(lambda, S, P, …), then lambda(c,k) is the external arrival rate of class c customers at center k (lambda(c,k) ≥ 0).

S(c,k)

mean service time of class c customers on the service center k (S(c,k)>0). For FCFS nodes, mean service times must be class-independent.

V(c,k)

visit ratio of class c customers to service center k (V(c,k) ≥ 0 ). If you pass this argument, class switching is not allowed

P(r,i,s,j)

probability that a class r job completing service at center i is routed to center j as a class s job. If you pass argument P, class switching is allowed; however, all servers must be fixed-rate or infinite-server nodes (m(k) ≤ 1 for all k).

m(k)

number of servers at center k. If m(k) < 1, enter k is a delay center (IS); otherwise it is a regular queueing center with m(k) servers. Default is m(k) = 1 for all k.

OUTPUTS

U(c,k)

If k is a queueing center, then U(c,k) is the class c utilization of center k. If k is an IS node, then U(c,k) is the class c traffic intensity defined as X(c,k)*S(c,k).

R(c,k)

class c response time at center k. The system response time for class c requests can be computed as dot(R, V, 2).

Q(c,k)

average number of class c requests at center k. The average number of class c requests in the system Qc can be computed as Qc = sum(Q, 2)

X(c,k)

class c throughput at center k.

NOTES

If the function call specifies the visit ratios V, class switching is not allowed. If the function call specifies the routing probability matrix P, then class switching is allowed; however, all nodes are restricted to be fixed rate servers or delay centers: multiple-server and general load-dependent centers are not supported. Note that the meaning of parameter lambda is different from one case to the other (see below).

REFERENCES

  • Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 7.4.1 ("Open Model Solution Techniques").

See also: qnopen,qnos,qnomvisits.

5.3.2 Closed Networks

Function File: pop_mix = qncmpopmix (k, N)

Return the set of population mixes for a closed multiclass queueing network with exactly k customers. Specifically, given a closed multiclass QN with C customer classes, where there are N(c) class c requests, a k-mix mix is a C-dimensional vector with the following properties:

all( mix >= 0 );
all( mix <= N );
sum( mix ) == k;

pop_mix is a matrix with C columns, such that each row represents a valid mix.

INPUTS

k

Size of the requested mix (scalar, k ≥ 0).

N(c)

number of class c requests (k ≤ sum(N)).

OUTPUTS

pop_mix(i,c)

number of class c requests in the i-th population mix. The number of mixes is rows(pop_mix).

If you are interested in the number of k-mixes only, you can use the funcion qnmvapop.

REFERENCES

  • Herb Schwetman, Implementing the Mean Value Algorithm for the Solution of Queueing Network Models, Technical Report 80-355, Department of Computer Sciences, Purdue University, revised February 15, 1982.

The slightly different problem of enumerating all tuples k_1, …, k_N such that \sum_i k_i = k and k_i ≥ 0, for a given k ≥ 0 has been described in S. Santini, Computing the Indices for a Complex Summation, unpublished report, available at http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf


See also: qncmnpop.

Function File: H = qncmnpop (N)

Given a network with C customer classes, this function computes the number of k-mixes H(r,k) that can be constructed by the multiclass MVA algorithm by allocating k customers to the first r classes.

INPUTS

N(c)

number of class-c requests in the system. The total number of requests in the network is sum(N).

OUTPUTS

H(r,k)

is the number of k mixes that can be constructed allocating k customers to the first r classes.

REFERENCES

  • Zahorjan, J. and Wong, E. The solution of separable queueing network models using mean value analysis. SIGMETRICS Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI 10.1145/1010629.805477

See also: qncmmva,qncmpopmix.

Function File: [U, R, Q, X] = qncmmva (N, S )
Function File: [U, R, Q, X] = qncmmva (N, S, V)
Function File: [U, R, Q, X] = qncmmva (N, S, V, m)
Function File: [U, R, Q, X] = qncmmva (N, S, V, m, Z)
Function File: [U, R, Q, X] = qncmmva (N, S, P)
Function File: [U, R, Q, X] = qncmmva (N, S, P, r)
Function File: [U, R, Q, X] = qncmmva (N, S, P, r, m)

Compute steady-state performance measures for closed, multiclass queueing networks using the Mean Value Analysys (MVA) algorithm.

Queueing policies at service centers can be any of the following:

FCFS

(First-Come-First-Served) customers are served in order of arrival; multiple servers are allowed. For this kind of queueing discipline, average service times must be class-independent.

PS

(Processor Sharing) customers are served in parallel by a single server, each customer receiving an equal share of the service rate.

LCFS-PR

(Last-Come-First-Served, Preemptive Resume) customers are served in reverse order of arrival by a single server and the last arrival preempts the customer in service who will later resume service at the point of interruption.

IS

(Infinite Server) customers are delayed independently of other customers at the service center (there is effectively an infinite number of servers).

INPUTS

N(c)

number of class c requests; N(c) ≥ 0. If class c has no requests (N(c) == 0), then for all k, this function returns U(c,k) = R(c,k) = Q(c,k) = X(c,k) = 0

S(c,k)

mean service time for class c requests at center k (S(c,k) ≥ 0). If the service time at center k is class-dependent, then center k is assumed to be of type -/G/1–PS (Processor Sharing). If center k is a FCFS node (m(k)>1), then the service times must be class-independent, i.e., all classes must have the same service time.

V(c,k)

average number of visits of class c requests at center k; V(c,k) ≥ 0, default is 1. If you pass this argument, class switching is not allowed

P(r,i,s,j)

probability that a class r request completing service at center i is routed to center j as a class s request; the reference stations for each class are specified with the paramter r. If you pass argument P, class switching is allowed; however, you can not specify any external delay (i.e., Z must be zero) and all servers must be fixed-rate or infinite-server nodes (m(k) ≤ 1 for all k).

r(c)

reference station for class c. If omitted, station 1 is the reference station for all classes. See qncmvisits.

m(k)

If m(k)<1, then center k is assumed to be a delay center (IS node -/G/\infty). If m(k)==1, then service center k is a regular queueing center (M/M/1–FCFS, -/G/1–LCFS-PR or -/G/1–PS). Finally, if m(k)>1, center k is a M/M/m–FCFS center with m(k) identical servers. Default is m(k)=1 for each k.

Z(c)

class c external delay (think time); Z(c) ≥ 0. Default is 0. This parameter can not be used if you pass a routing matrix as the second parameter of qncmmva.

OUTPUTS

U(c,k)

If k is a FCFS, LCFS-PR or PS node (m(k) ≥ 1), then U(c,k) is the class c utilization at center k, 0 ≤ U(c,k) ≤ 1. If k is an IS node, then U(c,k) is the class c traffic intensity at center k, defined as U(c,k) = X(c,k)*S(c,k). In this case the value of U(c,k) may be greater than one.

R(c,k)

class c response time at center k. The class c residence time at center k is R(c,k) * C(c,k). The total class c system response time is dot(R, V, 2).

Q(c,k)

average number of class c requests at center k. The total number of requests at center k is sum(Q(:,k)). The total number of class c requests in the system is sum(Q(c,:)).

X(c,k)

class c throughput at center k. The class c throughput can be computed as X(c,1) / V(c,1).

NOTES

If the function call specifies the visit ratios V, then class switching is not allowed. If the function call specifies the routing probability matrix P, then class switching is allowed; however, in this case all nodes are restricted to be fixed rate servers or delay centers: multiple-server and general load-dependent centers are not supported.

In presence of load-dependent servers (e.g., if m(i)>1 for some i), the MVA algorithm is known to be numerically unstable. Generally this problem shows up as negative values for the computed response times or utilizations. This is not a problem with the queueing package, but with the MVA algorithm; as such, there is no known workaround at the moment (aoart from using a different solution technique, if available). This function prints a warning if it detects numerical problems; you can disable the warning with the command warning("off", "qn:numerical-instability").

Given a network with K service centers, C job classes and population vector {\bf N}=\left[N_1, …, N_C\right], the MVA algorithm requires space O(C \prod_i (N_i + 1)). The time complexity is O(CK\prod_i (N_i + 1)). This implementation is slightly more space-efficient (see details in the code). While the space requirement can be mitigated by using some optimizations, the time complexity can not. If you need to analyze large closed networks you should consider the qncmmvaap function, which implements the approximate MVA algorithm. Note however that qncmmvaap will only provide approximate results.

REFERENCES

  • M. Reiser and S. S. Lavenberg, Mean-Value Analysis of Closed Multichain Queuing Networks, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313–322. 10.1145/322186.322195

This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998 and Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 7.4.2.1 ("Exact Solution Techniques").


See also: qnclosed, qncmmvaapprox, qncmvisits.

Function File: [U, R, Q, X] = qncmmvaap (N, S, V)
Function File: [U, R, Q, X] = qncmmvaap (N, S, V, m)
Function File: [U, R, Q, X] = qncmmvaap (N, S, V, m, Z)
Function File: [U, R, Q, X] = qncmmvaap (N, S, V, m, Z, tol)
Function File: [U, R, Q, X] = qncmmvaap (N, S, V, m, Z, tol, iter_max)

Approximate Mean Value Analysis (MVA) for closed, multiclass queueing networks with K service centers and C customer classes.

This implementation uses Bard and Schweitzer approximation. It is based on the assumption that the queue length at service center k with population set {\bf N}-{\bf 1}_c is approximately equal to the queue length with population set \bf N, times (n-1)/n:

Q_i(N-1c) ~ (n-1)/n Q_i(N)

where \bf N is a valid population mix, {\bf N}-{\bf 1}_c is the population mix \bf N with one class c customer removed, and n = \sum_c N_c is the total number of requests.

This implementation works for networks with infinite server (IS) and single-server nodes only.

INPUTS

N(c)

number of class c requests in the system (N(c) ≥ 0).

S(c,k)

mean service time for class c customers at center k (S(c,k) ≥ 0).

V(c,k)

average number of visits of class c requests to center k (V(c,k) ≥ 0).

m(k)

number of servers at center k. If m(k) < 1, then the service center k is assumed to be a delay center (IS). If m(k) == 1, service center k is a regular queueing center (FCFS, LCFS-PR or PS) with a single server node. If omitted, each service center has a single server. Note that multiple server nodes are not supported.

Z(c)

class c external delay (Z ≥ 0). Default is 0.

tol

Stopping tolerance (tol>0). The algorithm stops if the queue length computed on two subsequent iterations are less than tol. Default is 10^{-5}.

iter_max

Maximum number of iterations (iter_max>0. The function aborts if convergenge is not reached within the maximum number of iterations. Default is 100.

OUTPUTS

U(c,k)

If k is a FCFS, LCFS-PR or PS node, then U(c,k) is the utilization of class c requests on service center k. If k is an IS node, then U(c,k) is the class c traffic intensity at device k, defined as U(c,k) = X(c)*S(c,k)

R(c,k)

response time of class c requests at service center k.

Q(c,k)

average number of class c requests at service center k.

X(c,k)

class c throughput at service center k.

REFERENCES

  • Y. Bard, Some Extensions to Multiclass Queueing Network Analysis, proc. 4th Int. Symp. on Modelling and Performance Evaluation of Computer Systems, Feb 1979, pp. 51–62.
  • P. Schweitzer, Approximate Analysis of Multiclass Closed Networks of Queues, Proc. Int. Conf. on Stochastic Control and Optimization, jun 1979, pp. 25–29.

This implementation is based on Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 7.4.2.2 ("Approximate Solution Techniques"). This implementation is slightly different from the one described above, as it computes the average response times R instead of the residence times.


See also: qncmmva.

5.3.3 Mixed Networks

Function File: [U, R, Q, X] = qnmix (lambda, N, S, V, m)

Mean Value Analysis for mixed queueing networks. The network consists of K service centers (single-server or delay centers) and C independent customer chains. Both open and closed chains are possible. lambda is the vector of per-chain arrival rates (open classes); N is the vector of populations for closed chains.

Class switching is not allowed. Each customer class must correspond to an independent chain.

If the network is made of open or closed classes only, then this function calls qnom or qncmmva respectively, and prints a warning message.

INPUTS

lambda(c)
N(c)

For each customer chain c:

  • if c is a closed chain, then N(c)>0 is the number of class c requests and lambda(c) must be zero;
  • If c is an open chain, lambda(c)>0 is the arrival rate of class c requests and N(c) must be zero;

In other words, for each class c the following must hold:

(lambda(c)>0 && N(c)==0) || (lambda(c)==0 && N(c)>0)
S(c,k)

mean class c service time at center k, S(c,k) ≥ 0. For FCFS nodes, service times must be class-independent.

V(c,k)

average number of visits of class c customers to center k (V(c,k) ≥ 0).

m(k)

number of servers at center k. Only single-server (m(k)==1) or IS (Infinite Server) nodes (m(k)<1) are supported. If omitted, each center is assumed to be of type M/M/1-FCFS. Queueing discipline for single-server nodes can be FCFS, PS or LCFS-PR.

OUTPUTS

U(c,k)

class c utilization at center k.

R(c,k)

class c response time at center k.

Q(c,k)

average number of class c requests at center k.

X(c,k)

class c throughput at center k.

REFERENCES

  • Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 7.4.3 ("Mixed Model Solution Techniques"). Note that in this function we compute the mean response time R instead of the mean residence time as in the reference.
  • Herb Schwetman, Implementing the Mean Value Algorithm for the Solution of Queueing Network Models, Technical Report CSD-TR-355, Department of Computer Sciences, Purdue University, revised Feb 15, 1982.

See also: qncmmva, qncm.


5.4 Generic Algorithms

The queueing package provides a high-level function qnsolve for analyzing QN models. qnsolve takes as input a high-level description of the queueing model, and delegates the actual solution of the model to one of the lower-level function. qnsolve supports single or multiclass models, but at the moment only product-form networks can be analyzed. For non product-form networks See Non Product-Form QNs.

qnsolve accepts two input parameters. The first one is the list of nodes, encoded as an Octave cell array. The second parameter is the vector of visit ratios V, which can be either a vector (for single-class models) or a two-dimensional matrix (for multiple-class models).

Individual nodes in the network are structures build using the qnmknode function.

Function File: Q = qnmknode ("m/m/m-fcfs", S)
Function File: Q = qnmknode ("m/m/m-fcfs", S, m)
Function File: Q = qnmknode ("m/m/1-lcfs-pr", S)
Function File: Q = qnmknode ("-/g/1-ps", S)
Function File: Q = qnmknode ("-/g/1-ps", S, s2)
Function File: Q = qnmknode ("-/g/inf", S)
Function File: Q = qnmknode ("-/g/inf", S, s2)

Creates a node; this function can be used together with qnsolve. It is possible to create either single-class nodes (where there is only one customer class), or multiple-class nodes (where the service time is given per-class). Furthermore, it is possible to specify load-dependent service times. String literals are case-insensitive, so for example "-/g/inf", "-/G/inf" and "-/g/INF" are all equivalent.

INPUTS

S

Mean service time.

  • If S is a scalar, it is assumed to be a load-independent, class-independent service time.
  • If S is a column vector, then S(c) is assumed to the the load-independent service time for class c customers.
  • If S is a row vector, then S(n) is assumed to be the class-independent service time at the node, when there are n requests.
  • Finally, if S is a two-dimensional matrix, then S(c,n) is assumed to be the class c service time when there are n requests at the node.
m

Number of identical servers at the node. Default is m=1.

s2

Squared coefficient of variation for the service time. Default is 1.0.

The returned struct Q should be considered opaque to the client.


See also: qnsolve.

After the network has been defined, it is possible to solve it using qnsolve.

Function File: [U, R, Q, X] = qnsolve ("closed", N, QQ, V)
Function File: [U, R, Q, X] = qnsolve ("closed", N, QQ, V, Z)
Function File: [U, R, Q, X] = qnsolve ("open", lambda, QQ, V)
Function File: [U, R, Q, X] = qnsolve ("mixed", lambda, N, QQ, V)

High-level function for analyzing QN models.

  • For closed networks, the following server types are supported: M/M/m–FCFS, -/G/\infty, -/G/1–LCFS-PR, -/G/1–PS and load-dependent variants.
  • For open networks, the following server types are supported: M/M/m–FCFS, -/G/\infty and -/G/1–PS. General load-dependent nodes are not supported. Multiclass open networks do not support multiple server M/M/m nodes, but only single server M/M/1–FCFS.
  • For mixed networks, the following server types are supported: M/M/1–FCFS, -/G/\infty and -/G/1–PS. General load-dependent nodes are not supported.

INPUTS

N
N(c)

Number of requests in the system for closed networks. For single-class networks, N must be a scalar. For multiclass networks, N(c) is the population size of closed class c.

lambda
lambda(c)

External arrival rate (scalar) for open networks. For single-class networks, lambda must be a scalar. For multiclass networks, lambda(c) is the class c overall arrival rate.

QQ{i}

List of queues in the network. This must be a cell array with N elements, such that QQ{i} is a struct produced by the qnmknode function.

Z

External delay ("think time") for closed networks. Default 0.

OUTPUTS

U(k)

If k is a FCFS node, then U(k) is the utilization of service center k. If k is an IS node, then U(k) is the traffic intensity defined as X(k)*S(k).

R(k)

average response time of service center k.

Q(k)

average number of customers in service center k.

X(k)

throughput of service center k.

Note that for multiclass networks, the computed results are per-class utilization, response time, number of customers and throughput: U(c,k), R(c,k), Q(c,k), X(c,k).

String literals are case-insensitive, so "closed", "Closed" and "CLoSEd" are all equivalent.

EXAMPLE

Let us consider a closed, multiclass network with C=2 classes and K=3 service center. Let the population be M=(2, 1) (class 1 has 2 requests, and class 2 has 1 request). The nodes are as follows:

  • Node 1 is a M/M/1–FCFS node, with load-dependent service times. Service times are class-independent, and are defined by the matrix [0.2 0.1 0.1; 0.2 0.1 0.1]. Thus, S(1,2) = 0.2 means that service time for class 1 customers where there are 2 requests in 0.2. Note that service times are class-independent;
  • Node 2 is a -/G/1–PS node, with service times S_{1, 2} = 0.4 for class 1, and S_{2, 2} = 0.6 for class 2 requests;
  • Node 3 is a -/G/\infty node (delay center), with service times S_{1, 3}=1 and S_{2, 3}=2 for class 1 and 2 respectively.

After defining the per-class visit count V such that V(c,k) is the visit count of class c requests to service center k. We can define and solve the model as follows:



 QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), ...
        qnmknode( "-/g/1-ps", [0.4; 0.6] ), ...
        qnmknode( "-/g/inf", [1; 2] ) };
 V = [ 1 0.6 0.4; ...
       1 0.3 0.7 ];
 N = [ 2 1 ];
 [U R Q X] = qnsolve( "closed", N, QQ, V );
Function File: [U, R, Q, X] = qnclosed (N, S, V, …)

This function computes steady-state performance measures of closed queueing networks using the Mean Value Analysis (MVA) algorithm. The qneneing network is allowed to contain fixed-capacity centers, delay centers or general load-dependent centers. Multiple request classes are supported.

This function dispatches the computation to one of qncsemva, qncsmvald or qncmmva.

  • If N is a scalar, the network is assumed to have a single class of requests; in this case, the exact MVA algorithm is used to analyze the network. If S is a vector, then S(k) is the average service time of center k, and this function calls qncsmva which supports load-independent service centers. If S is a matrix, S(k,i) is the average service time at center k when i=1, …, N jobs are present; in this case, the network is analyzed with the qncmmvald function.
  • If N is a vector, the network is assumed to have multiple classes of requests, and is analyzed using the exact multiclass MVA algorithm as implemented in the qncmmva function.

See also: qncsmva, qncsmvald, qncmmva.

EXAMPLE

 P = [0 0.3 0.7; 1 0 0; 1 0 0]; # Transition probability matrix
 S = [1 0.6 0.2];               # Average service times
 m = ones(size(S));             # All centers are single-server
 Z = 2;                         # External delay
 N = 15;                        # Maximum population to consider
 V = qncsvisits(P);             # Compute number of visits
 X_bsb_lower = X_bsb_upper = X_ab_lower = X_ab_upper = X_mva = zeros(1,N);
 for n=1:N
   [X_bsb_lower(n) X_bsb_upper(n)] = qncsbsb(n, S, V, m, Z);
   [X_ab_lower(n) X_ab_upper(n)] = qncsaba(n, S, V, m, Z);
   [U R Q X] = qnclosed( n, S, V, m, Z );
   X_mva(n) = X(1)/V(1);
 endfor
 close all;
 plot(1:N, X_ab_lower,"g;Asymptotic Bounds;", ...
      1:N, X_bsb_lower,"k;Balanced System Bounds;", ...
      1:N, X_mva,"b;MVA;", "linewidth", 2, ...
      1:N, X_bsb_upper,"k", 1:N, X_ab_upper,"g" );
 axis([1,N,0,1]); legend("location","southeast"); legend("boxoff");
 xlabel("Number of Requests n"); ylabel("System Throughput X(n)");
Function File: [U, R, Q, X] = qnopen (lambda, S, V, …)

Compute utilization, response time, average number of requests in the system, and throughput for open queueing networks. If lambda is a scalar, the network is considered a single-class QN and is solved using qnopensingle. If lambda is a vector, the network is considered as a multiclass QN and solved using qnopenmulti.


See also: qnos, qnom.


5.5 Bounds Analysis

Function File: [Xl, Xu, Rl, Ru] = qnosaba (lambda, D)
Function File: [Xl, Xu, Rl, Ru] = qnosaba (lambda, S, V)
Function File: [Xl, Xu, Rl, Ru] = qnosaba (lambda, S, V, m)

Compute Asymptotic Bounds for open, single-class networks with K service centers.

INPUTS

lambda

Arrival rate of requests (scalar, lambda ≥ 0).

D(k)

service demand at center k. (vector of length K, D(k) ≥ 0).

S(k)

mean service time at center k. (vector of length K, S(k) ≥ 0).

V(k)

mean number of visits to center k. (vector of length K, V(k) ≥ 0).

m(k)

number of servers at center k. This function only supports M/M/1 queues, therefore m must be ones(size(S)).

OUTPUTS

Xl
Xu

Lower and upper bounds on the system throughput. Xl is always set to 0 since there can be no lower bound on the throughput of open networks (scalar).

Rl
Ru

Lower and upper bounds on the system response time. Ru is always set to +inf since there can be no upper bound on the throughput of open networks (scalar).


See also: qnomaba.

Function File: [Xl, Xu, Rl, Ru] = qnomaba (lambda, D)
Function File: [Xl, Xu, Rl, Rl] = qnomaba (lambda, S, V)

Compute Asymptotic Bounds for open, multiclass networks with K service centers and C customer classes.

INPUTS

lambda(c)

class c arrival rate to the system (vector of length C, lambda(c) > 0).

D(c, k)

class c service demand at center k (C \times K matrix, D(c, k) ≥ 0).

S(c, k)

mean service time of class c requests at center k (C \times K matrix, S(c, k) ≥ 0).

V(c, k)

mean number of visits of class c requests at center k (C \times K matrix, V(c, k) ≥ 0).

OUTPUTS

Xl(c)
Xu(c)

lower and upper bounds of class c throughput. Xl(c) is always 0 since there can be no lower bound on the throughput of open networks (vector of length C).

Rl(c)
Ru(c)

lower and upper bounds of class c response time. Ru(c) is always +inf since there can be no upper bound on the response time of open networks (vector of length C).


See also: qnombsb.

Function File: [Xl, Xu, Rl, Ru] = qncsaba (N, D)
Function File: [Xl, Xu, Rl, Ru] = qncsaba (N, S, V)
Function File: [Xl, Xu, Rl, Ru] = qncsaba (N, S, V, m)
Function File: [Xl, Xu, Rl, Ru] = qncsaba (N, S, V, m, Z)

Compute Asymptotic Bounds for the system throughput and response time of closed, single-class networks with K service centers.

Single-server and infinite-server nodes are supported. Multiple-server nodes and general load-dependent servers are not supported.

INPUTS

N

number of requests in the system (scalar, N>0).

D(k)

service demand at center k (D(k) ≥ 0).

S(k)

mean service time at center k (S(k) ≥ 0).

V(k)

average number of visits to center k (V(k) ≥ 0).

m(k)

number of servers at center k (if m is a scalar, all centers have that number of servers). If m(k) < 1, center k is a delay center (IS); if m(k) = 1, center k is a M/M/1-FCFS server. This function does not support multiple-server nodes. Default is 1.

Z

External delay (scalar, Z ≥ 0). Default is 0.

OUTPUTS

Xl
Xu

Lower and upper bounds on the system throughput.

Rl
Ru

Lower and upper bounds on the system response time.


See also: qncmaba.

Function File: [Xl, Xu, Rl, Ru] = qncmaba (N, D)
Function File: [Xl, Xu, Rl, Ru] = qncmaba (N, S, V)
Function File: [Xl, Xu, Rl, Ru] = qncmaba (N, S, V, m)
Function File: [Xl, Xu, Rl, Ru] = qncmaba (N, S, V, m, Z)

Compute Asymptotic Bounds for closed, multiclass networks with K service centers and C customer classes. Single-server and infinite-server nodes are supported. Multiple-server nodes and general load-dependent servers are not supported.

INPUTS

N(c)

number of class c requests in the system (vector of length C, N(c) ≥ 0).

D(c, k)

class c service demand at center k (C \times K matrix, D(c,k) ≥ 0).

S(c, k)

mean service time of class c requests at center k (C \times K matrix, S(c,k) ≥ 0).

V(c,k)

average number of visits of class c requests to center k (C \times K matrix, V(c,k) ≥ 0).

m(k)

number of servers at center k (if m is a scalar, all centers have that number of servers). If m(k) < 1, center k is a delay center (IS); if m(k) = 1, center k is a M/M/1-FCFS server. This function does not support multiple-server nodes. Default is 1.

Z(c)

class c external delay (vector of length C, Z(c) ≥ 0). Default is 0.

OUTPUTS

Xl(c)
Xu(c)

Lower and upper bounds for class c throughput.

Rl(c)
Ru(c)

Lower and upper bounds for class c response time.

REFERENCES

  • Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 5.2 ("Asymptotic Bounds").

See also: qncsaba.

Function File: [Xl, Xu, Rl, Ru] = qnosbsb (lambda, D)
Function File: [Xl, Xu, Rl, Ru] = qnosbsb (lambda, S, V)

Compute Balanced System Bounds for single-class, open networks with K service centers.

INPUTS

lambda

overall arrival rate to the system (scalar, lambda ≥ 0).

D(k)

service demand at center k (D(k) ≥ 0).

S(k)

service time at center k (S(k) ≥ 0).

V(k)

mean number of visits at center k (V(k) ≥ 0).

m(k)

number of servers at center k. This function only supports M/M/1 queues, therefore m must be ones(size(S)).

OUTPUTS

Xl
Xu

Lower and upper bounds on the system throughput. Xl is always set to 0, since there can be no lower bound on open networks throughput.

Rl
Ru

Lower and upper bounds on the system response time.


See also: qnosaba.

Function File: [Xl, Xu, Rl, Ru] = qncsbsb (N, D)
Function File: [Xl, Xu, Rl, Ru] = qncsbsb (N, S, V)
Function File: [Xl, Xu, Rl, Ru] = qncsbsb (N, S, V, m)
Function File: [Xl, Xu, Rl, Ru] = qncsbsb (N, S, V, m, Z)

Compute Balanced System Bounds on system throughput and response time for closed, single-class networks with K service centers.

INPUTS

N

number of requests in the system (scalar, N ≥ 0).

D(k)

service demand at center k (D(k) ≥ 0).

S(k)

mean service time at center k (S(k) ≥ 0).

V(k)

average number of visits to center k (V(k) ≥ 0). Default is 1.

m(k)

number of servers at center k. This function supports m(k) = 1 only (single-eserver FCFS nodes); this parameter is only for compatibility with qncsaba. Default is 1.

Z

External delay (Z ≥ 0). Default is 0.

OUTPUTS

Xl
Xu

Lower and upper bound on the system throughput.

Rl
Ru

Lower and upper bound on the system response time.

REFERENCES

  • Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. http://www.cs.washington.edu/homes/lazowska/qsp/. In particular, see section 5.4 ("Balanced Systems Bounds").

See also: qncmbsb.

Function File: [Xl, Xu, Rl, Ru] = qncmbsb (N, D)
Function File: [Xl, Xu, Rl, Ru] = qncmbsb (N, S, V)

Compute Balanced System Bounds for closed, multiclass networks with K service centers and C customer classes. Only single-server nodes are supported.

INPUTS

N(c)

number of class c requests in the system (vector of length C).

D(c, k)

class c service demand at center k (C \times K matrix, D(c,k) ≥ 0).

S(c, k)

mean service time of class c requests at center k (C \times K matrix, S(c,k) ≥ 0).

V(c,k)

average number of visits of class c requests to center k (C \times K matrix, V(c,k) ≥ 0).

OUTPUTS

Xl(c)
Xu(c)

Lower and upper class c throughput bounds (vector of length C).

Rl(c)
Ru(c)

Lower and upper class c response time bounds (vector of length C).


See also: qncsbsb.

Function File: [Xl, Xu, Rl, Ru] = qncmcb (N, D)
Function File: [Xl, Xu, Rl, Ru] = qncmcb (N, S, V)

Composite Bound (CB) on throughput and response time for closed multiclass networks.

This function implements the Composite Bound Method described in T. Kerola, The Composite Bound Method (CBM) for Computing Throughput Bounds in Multiple Class Environments, Technical Report CSD-TR-475, Purdue University, march 13, 1984 (revised august 27, 1984).

INPUTS

N(c)

number of class c requests in the system.

D(c, k)

class c service demand at center k (S(c,k) ≥ 0).

S(c, k)

mean service time of class c requests at center k (S(c,k) ≥ 0).

V(c,k)

average number of visits of class c requests to center k (V(c,k) ≥ 0).

OUTPUTS

Xl(c)
Xu(c)

Lower and upper class c throughput bounds.

Rl(c)
Ru(c)

Lower and upper class c response time bounds.

REFERENCES

  • Teemu Kerola, The Composite Bound Method (CBM) for Computing Throughput Bounds in Multiple Class Environments, Performance Evaluation Vol. 6, Issue 1, March 1986, DOI 10.1016/0166-5316(86)90002-7. Also available as Technical Report CSD-TR-475, Department of Computer Sciences, Purdue University, mar 13, 1984 (Revised Aug 27, 1984).
Function File: [Xl, Xu, Rl, Ru] = qncspb (N, D )
Function File: [Xl, Xu, Rl, Ru] = qncspb (N, S, V )
Function File: [Xl, Xu, Rl, Ru] = qncspb (N, S, V, m )
Function File: [Xl, Xu, Rl, Ru] = qncspb (N, S, V, m, Z )

Compute PB Bounds (C. H. Hsieh and S. Lam, 1987) for single-class, closed networks with K service centers.

INPUTS

number of requests in the system (scalar, N > 0).

D(k)

service demand of service center k (D(k) ≥ 0).

S(k)

mean service time at center k (S(k) ≥ 0).

V(k)

visit ratio to center k (V(k) ≥ 0).

m(k)

number of servers at center k. This function only supports M/M/1 queues, therefore m must be ones(size(S)).

Z

external delay (think time, Z ≥ 0). Default 0.

OUTPUTS

Xl
Xu

Lower and upper bounds on the system throughput.

Rl
Ru

Lower and upper bounds on the system response time.

REFERENCES

  • C. H. Hsieh and S. Lam, Two classes of performance bounds for closed queueing networks, Performance Evaluation, Vol. 7 Issue 1, pp. 3–30, February 1987, DOI 10.1016/0166-5316(87)90054-X. Also available as Technical Report TR-85-09, Department of Computer Science, University of Texas at Austin, June 1985

This function implements the non-iterative variant described in G. Casale, R. R. Muntz, G. Serazzi, Geometric Bounds: a Non-Iterative Analysis Technique for Closed Queueing Networks, IEEE Transactions on Computers, 57(6):780-794, June 2008.


See also: qncsaba, qbcsbsb, qncsgb.

Function File: [Xl, Xu, Rl, Ru, Ql, Qu] = qncsgb (N, D)
Function File: [Xl, Xu, Rl, Ru, Ql, Qu] = qncsgb (N, S, V)
Function File: [Xl, Xu, Rl, Ru, Ql, Qu] = qncsgb (N, S, V, m)
Function File: [Xl, Xu, Rl, Ru, Ql, Qu] = qncsgb (N, S, V, m, Z)

Compute Geometric Bounds (GB) on system throughput, system response time and server queue lenghts for closed, single-class networks with K service centers and N requests.

INPUTS

N

number of requests in the system (scalar, N > 0).

D(k)

service demand of service center k (vector of length K, D(k) ≥ 0).

S(k)

mean service time at center k (vector of length K, S(k) ≥ 0).

V(k)

visit ratio to center k (vector of length K, V(k) ≥ 0).

m(k)

number of servers at center k. This function only supports M/M/1 queues, therefore m must be ones(size(S)).

Z

external delay (think time, Z ≥ 0, scalar). Default is 0.

OUTPUTS

Xl
Xu

Lower and upper bound on the system throughput. If Z>0, these bounds are computed using Geometric Square-root Bounds (GSB). If Z==0, these bounds are computed using Geometric Bounds (GB)

Rl
Ru

Lower and upper bound on the system response time. These bounds are derived from Xl and Xu using Little’s Law: Rl = N / Xu - Z, Ru = N / Xl - Z

Ql(k)
Qu(k)

lower and upper bounds of center K queue length.

REFERENCES

  • G. Casale, R. R. Muntz, G. Serazzi, Geometric Bounds: a Non-Iterative Analysis Technique for Closed Queueing Networks, IEEE Transactions on Computers, 57(6):780-794, June 2008. 10.1109/TC.2008.37

In this implementation we set X^+ and X^- as the upper and lower Asymptotic Bounds as computed by the qncsab function, respectively.


5.6 QN Analysis Examples

In this section we illustrate with a few examples how the queueing package can be used to analyze queueing network models. Further examples can be found in the functions demo blocks, and can be inspected with the demo function Octave command.

5.6.1 Closed, Single Class Network

Let us consider again the network shown in Figure 5.1. We denote with S_k the average service time at center k, k=1, 2, 3. Let the service times be S_1 = 1.0, S_2 = 2.0 and S_3 = 0.8. The routing of jobs within the network is described with a routing probability matrix \bf P: a request completing service at center i is enqueued at center j with probability P_{i, j}. We use the following routing matrix:

    / 0  0.3  0.7 \
P = | 1  0    0   |
    \ 1  0    0   /

The network above can be analyzed with the qnclosed function see doc-qnclosed. qnclosed requires the following parameters:

N

Number of requests in the network (since we are considering a closed network, the number of requests is fixed)

S

Array of average service times at the centers: S(k) is the average service time at center k.

V

Array of visit ratios: V(k) is the average number of visits to center k.

We can compute V_k from the routing probability matrix P_{i, j} using the qncsvisits function see doc-qncsvisits. Therefore, we can analyze the network for a given population size N (e.g., N=10) as follows:

N = 10;
S = [1 2 0.8];
P = [0 0.3 0.7; 1 0 0; 1 0 0];
V = qncsvisits(P);
[U R Q X] = qnclosed( N, S, V )
   ⇒ U = 0.99139 0.59483 0.55518
   ⇒ R = 7.4360  4.7531  1.7500
   ⇒ Q = 7.3719  1.4136  1.2144
   ⇒ X = 0.99139 0.29742 0.69397

The output of qnclosed includes the vectors of utilizations U_k at center k, response time R_k, average number of customers Q_k and throughput X_k. In our example, the throughput of center 1 is X_1 = 0.99139, and the average number of requests in center 3 is Q_3 = 1.2144. The utilization of center 1 is U_1 = 0.99139, which is the highest among the service centers. Thus, center 1 is the bottleneck device.

This network can also be analyzed with the qnsolve function see doc-qnsolve. qnsolve can handle open, closed or mixed networks, and allows the network to be described in a very flexible way. First, let Q1, Q2 and Q3 be the variables describing the service centers. Each variable is instantiated with the qnmknode function.

Q1 = qnmknode( "m/m/m-fcfs", 1 );
Q2 = qnmknode( "m/m/m-fcfs", 2 );
Q3 = qnmknode( "m/m/m-fcfs", 0.8 );

The first parameter of qnmknode is a string describing the type of the node; "m/m/m-fcfs" denotes a M/M/m–FCFS center (this parameter is case-insensitive). The second parameter gives the average service time. An optional third parameter can be used to specify the number m of service centers. If omitted, it is assumed m=1 (single-server node).

Now, the network can be analyzed as follows:

N = 10;
V = [1 0.3 0.7];
[U R Q X] = qnsolve( "closed", N, { Q1, Q2, Q3 }, V )
   ⇒ U = 0.99139 0.59483 0.55518
   ⇒ R = 7.4360  4.7531  1.7500
   ⇒ Q = 7.3719  1.4136  1.2144
   ⇒ X = 0.99139 0.29742 0.69397

5.6.2 Open, Single Class Network

Let us consider an open network with K=3 service centers and the following routing probabilities:

    / 0  0.3  0.5 \
P = ! 1  0    0   |
    \ 1  0    0   /

In this network, requests can leave the system from center 1 with probability 1-(0.3+0.5) = 0.2. We suppose that external jobs arrive at center 1 with rate \lambda_1 = 0.15; there are no arrivals at centers 2 and 3.

Similarly to closed networks, we first compute the visit counts V_k to center k, k = 1, 2, 3. We use the qnosvisits function as follows:

P = [0 0.3 0.5; 1 0 0; 1 0 0];
lambda = [0.15 0 0];
V = qnosvisits(P, lambda)
   ⇒ V = 5.00000 1.50000 2.50000

where lambda(k) is the arrival rate at center k, and P is the routing matrix. Assuming the same service times as in the previous example, the network can be analyzed with the qnopen function see doc-qnopen, as follows:

S = [1 2 0.8];
[U R Q X] = qnopen( sum(lambda), S, V )
   ⇒ U = 0.75000 0.45000 0.30000
   ⇒ R = 4.0000  3.6364  1.1429
   ⇒ Q = 3.00000 0.81818 0.42857
   ⇒ X = 0.75000 0.22500 0.37500

The first parameter of the qnopen function is the (scalar) aggregate arrival rate.

Again, it is possible to use the qnsolve high-level function:

Q1 = qnmknode( "m/m/m-fcfs", 1 );
Q2 = qnmknode( "m/m/m-fcfs", 2 );
Q3 = qnmknode( "m/m/m-fcfs", 0.8 );
lambda = [0.15 0 0];
[U R Q X] = qnsolve( "open", sum(lambda), { Q1, Q2, Q3 }, V )
   ⇒ U = 0.75000 0.45000 0.30000
   ⇒ R = 4.0000  3.6364  1.1429
   ⇒ Q = 3.00000 0.81818 0.42857
   ⇒ X = 0.75000 0.22500 0.37500

5.6.3 Closed Multiclass Network/1

The following example is taken from Herb Schwetman, Implementing the Mean Value Algorithm for the Solution of Queueing Network Models, Technical Report CSD-TR-355, Department of Computer Sciences, Purdue University, Feb 15, 1982.

Let us consider the following multiclass QN with three servers and two classes

qn_closed_multi_apl

Figure 5.3

Servers 1 and 2 (labeled APL and IMS, respectively) are infinite server nodes; server 3 (labeled SYS) is Processor Sharing (PS). Mean service times are given in the following table:

APLIMSSYS
Class 11-0.025
Class 2-150.500

There is no class switching. If we assume a population of 15 requests for class 1, and 5 requests for class 2, then the model can be analyzed as follows:

 S = [1 0 .025; 0 15 .5];
 P = zeros(2,3,2,3);
 P(1,1,1,3) = P(1,3,1,1) = 1;
 P(2,2,2,3) = P(2,3,2,2) = 1;
 V = qncmvisits(P,[3 3]); # reference station is station 3
 N = [15 5];
 m = [-1 -1 1];
 [U R Q X] = qncmmva(N,S,V,m)
  ⇒
U =

   14.32312    0.00000    0.35808
    0.00000    4.70699    0.15690

R =

    1.00000    0.00000    0.04726
    0.00000   15.00000    0.93374

Q =

   14.32312    0.00000    0.67688
    0.00000    4.70699    0.29301

X =

   14.32312    0.00000   14.32312
    0.00000    0.31380    0.31380

5.6.4 Closed Multiclass Network/2

The following example is from M. Marzolla, The qnetworks Toolbox: A Software Package for Queueing Networks Analysis, Technical Report UBLCS-2010-04, Department of Computer Science, University of Bologna, Italy, February 2010.

qn_web_model

Figure 5.4: Three-tier enterprise system model

The model shown in Figure 5.4 shows a three-tier enterprise system with K=6 service centers. The first tier contains the Web server (node 1), which is responsible for generating Web pages and transmitting them to clients. The application logic is implemented by nodes 2 and 3, and the storage tier is made of nodes 4–6.The system is subject to two workload classes, both represented as closed populations of N_1 and N_2 requests, respectively. Let D_{c, k} denote the service demand of class c requests at center k. We use the parameter values:

Serv. no.NameClass 1Class 2
1Web Server122
2App. Server 11420
3App. Server 22314
4DB Server 12090
5DB Server 28030
6DB Server 33133

We set the total number of requests to 100, that is N_1 + N_2 = N = 100, and we study how different population mixes (N_1, N_2) affect the system throughput and response time. Let 0 < \beta_1 < 1 denote the fraction of class 1 requests: N_1 = \beta_1 N, N_2 = (1-\beta_1)N. The following Octave code defines the model for \beta_1 = 0.1:

N = 100;     # total population size
beta1 = 0.1; # fraction of class 1 reqs.
S = [12 14 23 20 80 31; \
      2 20 14 90 30 33 ];
V = ones(size(S));
pop = [fix(beta1*N) N-fix(beta1*N)];
[U R Q X] = qncmmva(pop, S, V);

The qncmmva(pop, S, V) function invocation uses the multiclass MVA algorithm to compute per-class utilizations U_{c, k}, response times R_{c,k}, mean queue lengths Q_{c,k} and throughputs X_{c,k} at each service center k, given a population vector pop, mean service times S and visit ratios V. Since we are given the service demands D_{c, k} = S_{c, k} V_{c,k}, but function qncmmva requires separate service times and visit ratios, we set the service times equal to the demands, and all visit ratios equal to one. Overall class and system throughputs and response times can also be computed:

X1 = X(1,1) / V(1,1)     # class 1 throughput
        ⇒ X1 =  0.0044219
X2 = X(2,1) / V(2,1)     # class 2 throughput
        ⇒ X2 =  0.010128
XX = X1 + X2             # system throughput
        ⇒ XX =  0.014550
R1 = dot(R(1,:), V(1,:)) # class 1 resp. time
        ⇒ R1 =  2261.5
R2 = dot(R(2,:), V(2,:)) # class 2 resp. time
        ⇒ R2 =  8885.9
RR = N / XX              # system resp. time
        ⇒ RR =  6872.7

dot(X,Y) computes the dot product of two vectors. R(1,:) is the first row of matrix R and V(1,:) is the first row of matrix V, so dot(R(1,:), V(1,:)) computes \sum_k R_{1,k} V_{1,k}.

web

Figure 5.5: Throughput and Response Times as a function of the population mix

We can also compute the system power \Phi = X / R, which defines how efficiently resources are being used: high values of \Phi denote the desirable situation of high throughput and low response time. Figure 5.6 shows \Phi as a function of \beta_1. We observe a “plateau” of the global system power, corresponding to values of \beta_1 which approximately lie between 0.3 and 0.7. The per-class power exhibits an interesting (although not completely surprising) pattern, where the class with higher population exhibits worst efficiency as it produces higher contention on the resources.

power

Figure 5.6: System Power as a function of the population mix

5.6.5 Closed Multiclass Network/3

We now consider an example of multiclass network with class switching. The example is taken from Sch82, and is shown in Figure Figure 5.7.

qn_closed_multi_cs

Figure 5.7: Multiclass Model with Class Switching

The system consists of three devices and two job classes. The CPU node is a PS server, while the two nodes labeled I/O are FCFS. Class 1 mean service time at the CPU is 0.01; class 2 mean service time at the CPU is 0.05. The mean service time at node 2 is 0.1, and is class-independent. Similarly, the mean service time at node 3 is 0.07. Jobs in class 1 leave the CPU and join class 2 with probability 0.1; jobs of class 2 leave the CPU and join class 1 with probability 0.2. There are N=3 jobs, which are initially allocated to class 1. However, note that since class switching is allowed, the total number of jobs in each class does not remain constant; however the total number of jobs does.

 C = 2; K = 3;
 S = [.01 .07 .10; ...
      .05 .07 .10 ];
 P = zeros(C,K,C,K);
 P(1,1,1,2) = .7; P(1,1,1,3) = .2; P(1,1,2,1) = .1;
 P(2,1,2,2) = .3; P(2,1,2,3) = .5; P(2,1,1,1) = .2;
 P(1,2,1,1) = P(2,2,2,1) = 1;
 P(1,3,1,1) = P(2,3,2,1) = 1;
 N = [3 0];
 [U R Q X] = qncmmva(N, S, P)
  ⇒
U =

   0.12609   0.61784   0.25218
   0.31522   0.13239   0.31522

R =

   0.014653   0.133148   0.163256
   0.073266   0.133148   0.163256

Q =

   0.18476   1.17519   0.41170
   0.46190   0.25183   0.51462

X =

   12.6089    8.8262    2.5218
    6.3044    1.8913    3.1522

Next: , Previous: , Up: Top   [Contents][Index]

6 References

[Aky88]

Ian F. Akyildiz, Mean Value Analysis for Blocking Queueing Networks, IEEE Transactions on Software Engineering, vol. 14, n. 2, april 1988, pp. 418–428. DOI 10.1109/32.4663

[Bar79]

Y. Bard, Some Extensions to Multiclass Queueing Network Analysis, proc. 4th Int. Symp. on Modelling and Performance Evaluation of Computer Systems, feb. 1979, pp. 51–62.

[BCMP75]

F. Baskett, K. Mani Chandy, R. R. Muntz, and F. G. Palacios. 1975. Open, Closed, and Mixed Networks of Queues with Different Classes of Customers. J. ACM 22, 2 (April 1975), 248—260, DOI 10.1145/321879.321887

[BGMT98]

G. Bolch, S. Greiner, H. de Meer and K. Trivedi, Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications, Wiley, 1998.

[Buz73]

J. P. Buzen, Computational Algorithms for Closed Queueing Networks with Exponential Servers, Communications of the ACM, volume 16, number 9, september 1973, pp. 527–531. DOI 10.1145/362342.362345

[C08]

G. Casale, A note on stable flow-equivalent aggregation in closed networks. Queueing Syst. Theory Appl., 60:193–-202, December 2008, DOI 10.1007/s11134-008-9093-6

[CMS08]

G. Casale, R. R. Muntz, G. Serazzi, Geometric Bounds: a Non-Iterative Analysis Technique for Closed Queueing Networks, IEEE Transactions on Computers, 57(6):780-794, June 2008. DOI 10.1109/TC.2008.37

[GrSn97]

C. M. Grinstead, J. L. Snell, (July 1997). Introduction to Probability. American Mathematical Society. ISBN 978-0821807491; this excellent textbook is available in PDF format and can be used under the terms of the GNU Free Documentation License (FDL)

[Jac04]

J. R. Jackson, Jobshop-Like Queueing Systems, Vol. 50, No. 12, Ten Most Influential Titles of "Management Science’s" First Fifty Years (Dec., 2004), pp. 1796-1802, available online

[Jai91]

R. Jain, The Art of Computer Systems Performance Analysis, Wiley, 1991, p. 577.

[HsLa87]

C. H. Hsieh and S. Lam, Two classes of performance bounds for closed queueing networks, PEVA, vol. 7, n. 1, pp. 3–30, 1987

[Ker84]

T. Kerola, The Composite Bound Method (CBM) for Computing Throughput Bounds in Multiple Class Environments, Performance Evaluation, Vol. 6 Isue 1, March 1986, DOI 10.1016/0166-5316(86)90002-7; also available as Technical Report CSD-TR-475, Department of Computer Sciences, Purdue University, mar 13, 1984 (Revised aug 27, 1984).

[LZGS84]

E. D. Lazowska, J. Zahorjan, G. Scott Graham, and K. C. Sevcik, Quantitative System Performance: Computer System Analysis Using Queueing Network Models, Prentice Hall, 1984. available online.

[ReKo76]

M. Reiser, H. Kobayashi, On The Convolution Algorithm for Separable Queueing Networks, In Proceedings of the 1976 ACM SIGMETRICS Conference on Computer Performance Modeling Measurement and Evaluation (Cambridge, Massachusetts, United States, March 29–31, 1976). SIGMETRICS ’76. ACM, New York, NY, pp. 109–117. DOI 10.1145/800200.806187

[ReLa80]

M. Reiser and S. S. Lavenberg, Mean-Value Analysis of Closed Multichain Queuing Networks, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313–322. DOI 10.1145/322186.322195

[Sch79]

P. Schweitzer, Approximate Analysis of Multiclass Closed Networks of Queues, Proc. Int. Conf. on Stochastic Control and Optimization, jun 1979, pp. 25—29

[Sch80]

H. D. Schwetman, Testing Network-of-Queues Software, Technical Report CSD-TR 330, Department of computer Sciences, Purdue University, 1980

[Sch81]

H. D. Schwetman, Some Computational Aspects of Queueing Network Models, Technical Report CSD-TR-354, Department of Computer Sciences, Purdue University, feb, 1981 (revised).

[Sch82]

H. D. Schwetman, Implementing the Mean Value Algorithm for the Solution of Queueing Network Models, Technical Report CSD-TR-355, Department of Computer Sciences, Purdue University, feb 15, 1982.

[Sch84]

T. Kerola, H. D. Schwetman, Performance Bounds for Multiclass Models, Technical Report CSD-TR-479, Department of Computer Sciences, Purdue University, 1984.

[Tij03]

H. C. Tijms, A first course in stochastic models, John Wiley and Sons, 2003, ISBN 0471498807, ISBN 9780471498803, DOI 10.1002/047001363X

[ZaWo81]

J. Zahorjan and E. Wong, The solution of separable queueing network models using mean value analysis. SIGMETRICS Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI 10.1145/1010629.805477

[Zeng03]

G. Zeng, Two common properties of the erlang-B function, erlang-C function, and Engset blocking function, Mathematical and Computer Modelling, Volume 37, Issues 12-13, June 2003, Pages 1287-1296 DOI 10.1016/S0895-7177(03)90040-9


Next: , Previous: , Up: Top   [Contents][Index]

Appendix A GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users’ Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

    A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others’ Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

one line to give the program's name and a brief idea of what it does.  
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

program Copyright (C) year name of author 
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.


Next: , Previous: , Up: Top   [Contents][Index]

Concept Index

Jump to:   A   B   C   D   E   F   G   I   L   M   N   O   P   Q   R   S   T   W  
Index Entry  Section

A
absorption probabilities, DTMC: Mean time to absorption (DTMC)
approximate MVA: Single Class Models
asymmetric M/M/m system: The Asymmetric M/M/m System
asymptotic bounds: Bounds Analysis
asymptotic bounds: Bounds Analysis

B
balanced system bounds: Bounds Analysis
balanced system bounds: Bounds Analysis
BCMP network: Single Class Models
birth-death process, CTMC: Birth-death process (CTMC)
birth-death process, DTMC: Birth-death process (DTMC)
blocking queueing network: Single Class Models
blocking queueing network: Single Class Models
bounds, asymptotic: Bounds Analysis
bounds, asymptotic: Bounds Analysis
bounds, asymptotic: Bounds Analysis
bounds, asymptotic: Bounds Analysis
bounds, balanced system: Bounds Analysis
bounds, balanced system: Bounds Analysis
bounds, balanced system: Bounds Analysis
bounds, composite: Bounds Analysis
bounds, geometric: Bounds Analysis
bounds, PB: Bounds Analysis

C
closed multiclass network: Bounds Analysis
closed multiclass network: Bounds Analysis
closed multiclass network: Bounds Analysis
closed network: Single Class Models
closed network: Bounds Analysis
closed network: Bounds Analysis
closed network, approximate analysis: Single Class Models
closed network, finite capacity: Single Class Models
closed network, finite capacity: Single Class Models
closed network, multiple classes: Single Class Models
closed network, multiple classes: Multiple Class Models
closed network, multiple classes: Multiple Class Models
closed network, multiple classes: Multiple Class Models
closed network, multiple classes: Multiple Class Models
closed network, multiple classes: Generic Algorithms
closed network, single class: Single Class Models
closed network, single class: Single Class Models
closed network, single class: Single Class Models
closed network, single class: Single Class Models
closed network, single class: Single Class Models
closed network, single class: Generic Algorithms
closed network, single class: Bounds Analysis
closed network, single class: Bounds Analysis
closed network, single class: Bounds Analysis
CMVA: Single Class Models
composite bounds: Bounds Analysis
conditional MVA (CMVA): Single Class Models
continuous time Markov chain: Continuous-Time Markov Chains
continuous time Markov chain: State occupancy probabilities (CTMC)
continuous time Markov chain: Birth-death process (CTMC)
continuous time Markov chain: Time-averaged expected sojourn times (CTMC)
continuous time Markov chain: Mean time to absorption (CTMC)
continuous time Markov chain: First passage times (CTMC)
convolution algorithm: Single Class Models
convolution algorithm: Single Class Models
copyright: Copying
CTMC: Continuous-Time Markov Chains
CTMC: State occupancy probabilities (CTMC)
CTMC: Birth-death process (CTMC)
CTMC: Time-averaged expected sojourn times (CTMC)
CTMC: Mean time to absorption (CTMC)
CTMC: First passage times (CTMC)

D
deprecated functions: Naming Conventions
discrete time Markov chain: Discrete-Time Markov Chains
discrete time Markov chain: Discrete-Time Markov Chains
discrete time Markov chain: State occupancy probabilities (DTMC)
discrete time Markov chain: Birth-death process (DTMC)
discrete time Markov chain: Expected number of visits (DTMC)
discrete time Markov chain: Time-averaged expected sojourn times (DTMC)
discrete time Markov chain: Mean time to absorption (DTMC)
discrete time Markov chain: First passage times (DTMC)
DTMC: Discrete-Time Markov Chains
DTMC: Discrete-Time Markov Chains
DTMC: State occupancy probabilities (DTMC)
DTMC: Birth-death process (DTMC)
DTMC: Expected number of visits (DTMC)
DTMC: Time-averaged expected sojourn times (DTMC)
DTMC: Mean time to absorption (DTMC)
DTMC: First passage times (DTMC)

E
Engset loss formula: The Engset Formula
Erlang-B formula: The Erlang-B Formula
Erlang-C formula: The Erlang-C Formula
expected sojourn time, CTMC: Expected sojourn times (CTMC)
expected sojourn times, DTMC: Expected number of visits (DTMC)

F
first passage times: First passage times (DTMC)
first passage times, CTMC: First passage times (CTMC)
fundamental matrix: Mean time to absorption (DTMC)

G
geometric bounds: Bounds Analysis

I
irreducible Markov chain: Discrete-Time Markov Chains
irreducible Markov chain: Continuous-Time Markov Chains

L
load-dependent service center: Single Class Models
load-dependent service center: Single Class Models

M
M/G/1 system: The M/G/1 System
M/H_m/1 system: The M/Hm/1 System
M/M/1 system: The M/M/1 System
M/M/1/K system: The M/M/1/K System
M/M/inf system: The M/M/inf System
M/M/m system: The M/M/m System
M/M/m/K system: The M/M/m/K System
Markov chain, continuous time: Continuous-Time Markov Chains
Markov chain, continuous time: Continuous-Time Markov Chains
Markov chain, continuous time: State occupancy probabilities (CTMC)
Markov chain, continuous time: Birth-death process (CTMC)
Markov chain, continuous time: Expected sojourn times (CTMC)
Markov chain, continuous time: Time-averaged expected sojourn times (CTMC)
Markov chain, continuous time: Mean time to absorption (CTMC)
Markov chain, continuous time: First passage times (CTMC)
Markov chain, discrete time: Discrete-Time Markov Chains
Markov chain, discrete time: Discrete-Time Markov Chains
Markov chain, discrete time: State occupancy probabilities (DTMC)
Markov chain, discrete time: Birth-death process (DTMC)
Markov chain, discrete time: Expected number of visits (DTMC)
Markov chain, discrete time: Time-averaged expected sojourn times (DTMC)
Markov chain, discrete time: Mean time to absorption (DTMC)
Markov chain, discrete time: First passage times (DTMC)
Markov chain, state occupancy probabilities: State occupancy probabilities (CTMC)
Markov chain, stationary probabilities: State occupancy probabilities (DTMC)
Markov chain, transient probabilities: State occupancy probabilities (DTMC)
mean recurrence times: First passage times (DTMC)
mean time to absorption, CTMC: Mean time to absorption (CTMC)
mean time to absorption, DTMC: Mean time to absorption (DTMC)
Mean Value Analysis, conditional (CMVA): Single Class Models
Mean Value Analysys (MVA): Single Class Models
Mean Value Analysys (MVA): Single Class Models
Mean Value Analysys (MVA): Multiple Class Models
Mean Value Analysys (MVA): Multiple Class Models
Mean Value Analysys (MVA), approximate: Single Class Models
Mean Value Analysys (MVA), approximate: Multiple Class Models
mixed network: Multiple Class Models
multiclass network, closed: Multiple Class Models
multiclass network, closed: Multiple Class Models
multiclass network, closed: Bounds Analysis
multiclass network, closed: Bounds Analysis
multiclass network, closed: Bounds Analysis
multiclass network, open: Multiple Class Models
multiclass network, open: Bounds Analysis
MVA: Single Class Models
MVA, approximate: Single Class Models
MVA, approximate: Multiple Class Models
MVABLO: Single Class Models

N
normalization constant: Single Class Models
normalization constant: Single Class Models
normalization constant: Single Class Models

O
open network: Generic Algorithms
open network: Bounds Analysis
open network: Bounds Analysis
open network: Bounds Analysis
open network, multiple classes: Multiple Class Models
open network, single class: Single Class Models

P
PB bounds: Bounds Analysis
population mix: Multiple Class Models
population mix: Multiple Class Models

Q
queueing network with blocking: Single Class Models
queueing networks: Queueing Networks

R
RS blocking: Single Class Models

S
stationary probabilities: State occupancy probabilities (CTMC)

T
time-alveraged sojourn time, CTMC: Time-averaged expected sojourn times (CTMC)
time-alveraged sojourn time, DTMC: Time-averaged expected sojourn times (DTMC)
traffic intensity: The M/M/inf System

W
warranty: Copying

Jump to:   A   B   C   D   E   F   G   I   L   M   N   O   P   Q   R   S   T   W  

Previous: , Up: Top   [Contents][Index]

Function Index

Jump to:   C   D   E   Q  
Index Entry  Section

C
ctmc: State occupancy probabilities (CTMC)
ctmc: State occupancy probabilities (CTMC)
ctmcbd: Birth-death process (CTMC)
ctmcchkQ: Continuous-Time Markov Chains
ctmcexps: Expected sojourn times (CTMC)
ctmcexps: Expected sojourn times (CTMC)
ctmcfpt: First passage times (CTMC)
ctmcfpt: First passage times (CTMC)
ctmcisir: Continuous-Time Markov Chains
ctmcmtta: Mean time to absorption (CTMC)
ctmctaexps: Time-averaged expected sojourn times (CTMC)
ctmctaexps: Time-averaged expected sojourn times (CTMC)

D
dtmc: State occupancy probabilities (DTMC)
dtmc: State occupancy probabilities (DTMC)
dtmcbd: Birth-death process (DTMC)
dtmcchkP: Discrete-Time Markov Chains
dtmcexps: Expected number of visits (DTMC)
dtmcexps: Expected number of visits (DTMC)
dtmcfpt: First passage times (DTMC)
dtmcisir: Discrete-Time Markov Chains
dtmcmtta: Mean time to absorption (DTMC)
dtmcmtta: Mean time to absorption (DTMC)
dtmctaexps: Time-averaged expected sojourn times (DTMC)
dtmctaexps: Time-averaged expected sojourn times (DTMC)

E
engset: The Engset Formula
erlangb: The Erlang-B Formula
erlangc: The Erlang-C Formula

Q
qnclosed: Generic Algorithms
qncmaba: Bounds Analysis
qncmaba: Bounds Analysis
qncmaba: Bounds Analysis
qncmaba: Bounds Analysis
qncmbsb: Bounds Analysis
qncmbsb: Bounds Analysis
qncmcb: Bounds Analysis
qncmcb: Bounds Analysis
qncmmva: Multiple Class Models
qncmmva: Multiple Class Models
qncmmva: Multiple Class Models
qncmmva: Multiple Class Models
qncmmva: Multiple Class Models
qncmmva: Multiple Class Models
qncmmva: Multiple Class Models
qncmmvaap: Multiple Class Models
qncmmvaap: Multiple Class Models
qncmmvaap: Multiple Class Models
qncmmvaap: Multiple Class Models
qncmmvaap: Multiple Class Models
qncmnpop: Multiple Class Models
qncmpopmix: Multiple Class Models
qncmvisits: Multiple Class Models
qncmvisits: Multiple Class Models
qncsaba: Bounds Analysis
qncsaba: Bounds Analysis
qncsaba: Bounds Analysis
qncsaba: Bounds Analysis
qncsbsb: Bounds Analysis
qncsbsb: Bounds Analysis
qncsbsb: Bounds Analysis
qncsbsb: Bounds Analysis
qncscmva: Single Class Models
qncscmva: Single Class Models
qncsconv: Single Class Models
qncsconv: Single Class Models
qncsconvld: Single Class Models
qncsgb: Bounds Analysis
qncsgb: Bounds Analysis
qncsgb: Bounds Analysis
qncsgb: Bounds Analysis
qncsmva: Single Class Models
qncsmva: Single Class Models
qncsmva: Single Class Models
qncsmvaap: Single Class Models
qncsmvaap: Single Class Models
qncsmvaap: Single Class Models
qncsmvaap: Single Class Models
qncsmvaap: Single Class Models
qncsmvablo: Single Class Models
qncsmvald: Single Class Models
qncsmvald: Single Class Models
qncspb: Bounds Analysis
qncspb: Bounds Analysis
qncspb: Bounds Analysis
qncspb: Bounds Analysis
qncsvisits: Single Class Models
qncsvisits: Single Class Models
qnmarkov: Single Class Models
qnmarkov: Single Class Models
qnmarkov: Single Class Models
qnmarkov: Single Class Models
qnmix: Multiple Class Models
qnmknode: Generic Algorithms
qnmknode: Generic Algorithms
qnmknode: Generic Algorithms
qnmknode: Generic Algorithms
qnmknode: Generic Algorithms
qnmknode: Generic Algorithms
qnmknode: Generic Algorithms
qnom: Multiple Class Models
qnom: Multiple Class Models
qnom: Multiple Class Models
qnom: Multiple Class Models
qnomaba: Bounds Analysis
qnomaba: Bounds Analysis
qnomvisits: Multiple Class Models
qnopen: Generic Algorithms
qnos: Single Class Models
qnos: Single Class Models
qnosaba: Bounds Analysis
qnosaba: Bounds Analysis
qnosaba: Bounds Analysis
qnosbsb: Bounds Analysis
qnosbsb: Bounds Analysis
qnosvisits: Single Class Models
qnsolve: Generic Algorithms
qnsolve: Generic Algorithms
qnsolve: Generic Algorithms
qnsolve: Generic Algorithms
qsammm: The Asymmetric M/M/m System
qsmg1: The M/G/1 System
qsmh1: The M/Hm/1 System
qsmm1: The M/M/1 System
qsmm1k: The M/M/1/K System
qsmminf: The M/M/inf System
qsmmm: The M/M/m System
qsmmm: The M/M/m System
qsmmmk: The M/M/m/K System

Jump to:   C   D   E   Q  

queueing/doc/queueing.pdf0000664000175000017500000213376513356152315015371 0ustar morenomoreno%PDF-1.5 %ÐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ãd4›½*´.‰<øï·_•èÌf’W¯_wÕ«îrðãc;Šòê`GæUŠOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ãd4›½*´.‰<Ì¿ß~U¢Îf’W¯_u½ªîvðãc;ZäÕÁŽÌ«Ÿ¶­®MfGñÏ}í I•]/¶ìÞ­ÍmÞ¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ÕÿEK{*ʇuÄpg6;µÞ$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­ž÷ŽE™7·¢â žÒ"/²îÑ7»¸¦‘¼ýj;{Y—ÇÊ‹"1þt‹m×|‘£o¼irÛåI É‘c¶×º>[TÒ›ÏEnn#×ÛûþbÅø¹‘ûÒî«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gŽÏR©ð133wÄ xAÄbêí;¬ÒaGL6K& 0+‡}&ö"?‘á°(Ò¦Òa/ ¡cì,•!£½¥‰î-fö3¤Ù*IÃx {aªùð”sIC%ÒðhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Õ^C<ÐHàDN8ð÷õÌŠV{Hôüæç=üúØS`¾Jñ m}u%ŒÒßE Y]^/`»w¦¶oâÃÕå:1L·ÙÖVÝ‹omy¾èUÿ­àTÙ ÖÃþŽv¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”žX[“ÖôÚã{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîFŽ^‚ñÎp•=‰!9òÌþÚ4gÀêBË¥0pôùÞÞ‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—žX NˆHæžÐÔ3$¤Çž˜{<Ý0Š*¢5cÕ~ÿP÷õʯÂùÝ5WÂ42^!ž0^#žrq‰xƘœE„3xÎü ñ ªz“)cÒgl1BÌîÒ°õ•?ŸXqû!òŠNA‡¨Wš»A*dý1ùÔ)iȧΰÅç“Оó â9ç’†NVf¤¡–kô¯VäaŠžUJü†ôì?%Íš5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›þ1âj· ¾gÈÈ endstream endobj 6 0 obj << /Length 311 /Filter /FlateDecode >> stream xÚÁJ1†ïû¹™3f2I6¹ µ ­¬'ñ°lÓºX»˜¶|z“M+D$fþÌ|ù‘ÉtyÉ"ðÚ±þ­’S5nXIæžtšTŠJDÖüÇ0‘¶ŠFMó®ÛêꦱLI°ÆÖ®3“±s¬]±'Þ¾„ZPcø]èjBþ‘¯©¦ùòŽ)E>ì6¥rŸ»]Ÿï×Ú*ÞÕÈ7¡~no«Y[½Sä5Úƒ“x¦ÍHø‰"¶®–Ά¼ô˜áˆ0=!fÈÒðqâÅ>m'âóã° —9×|¶ø+ ,a=ƒİ Ý>%‚›’•~.P7X(‰N rÒL~¡ÒVe$A!ã Пl[Œ1ìÆâÜ¢‹ŸãvÛýêJDúé‚÷tvá „d{; endstream endobj 14 0 obj << /Length 968 /Filter /FlateDecode >> stream xÚVKã6 ¾Ï¯ðÑ&Zë娷¢Ån ´E€Ú4¶“[lÏ¢ýõ%Eù5›í9„¢(òãGRO2øñ¤Ì’ƒ”¬TERµOYÐúsBÂï??ñh§¤€ÿÿ5Ùk!’ýÊÛǧŸ´NxÆÊ¬äÉñ„á„æ¬í±NþLr·(Ò¼=_Pv?':gZ&“¢$³ Õ>åjík/Y&“ýÊ쯌k²ÜFå9+À4#+‘eÅón¯Kb9‹<[D¾ˆbå"ªE̱Ieé/Î7‹²ñÿºëÕ„Äö@‹ ¹d\ó µÎp÷éãqæ²TL(‘YrõÞ£ñ~eMÔçê·.Cè6emÄøÃØÙÇìðŽœå¥~Ïdý5 MUÞ;ÈàŒ¸â*ºòqK|¼Ø~·WêNÿÃ¥A¡Àê«O}?к©í`]GVî´±>¤¿ÍØØîL«›©°ý^wZ§æMj(!(«±mºÐœýAµÕ¬ºšÂL8*×õ¶¢)龨á’ɶ%C›Æ÷ž”*åL0ÀžÓ ÁJ) , ÞáåÍ>WÌüJ>[ÛG·ZlRËôì ÁjjÚm´æ5#mÈ Õ5$âíË84´~ÃèeKÖ•»Ù&ˆÑïe ÙRÄÑ\içæ®ßlÝÄ ˜Ýnª¯®„ÀIç[E:g („ƒí”ê°Iÿý?q雾ñ”QtCö`s½ÒAL …<íb[è2°-t±eÈ6L©‘6dšm4k]H¦¶ØÑä£\·L ƒœãXûxvE;]ÝøÉ®!têþó4/H¨(ÓøtžäËß’fÊè)Ë€V<€¬N%F.f ÔÊè¦C›Áú¸†jŒ×! "ÚZKájR|Á…ó¯dm#º…²ú^&1ëÕ AkBµúXï8_æÁÞ„¨ ¶2±C­:›èÁ¹Ìã\Âÿv.sInsµê\Q¿ƒPÇx–ÃTÀM7M(ì à©¿š©€y¼Dò!h6#‰((¶›‚8¸¬bÓ{:{5÷;å<Â-ôLyÏ\ãôÓy”{ÓFö Ý–΂ ;¹X¢–îÙ¥ßQ¹î÷oóêüܲ1c1g šš&©Â”Fº¹x:ßÐh{1áV ·i^˜¦éÈ…©ÍÊ{'ïZRÇËëýGVäðúÓKÃUƒykî½Häåü"Y ƒœŠüÏ¢R3]æá]T<ö.*¾ó.RLÅgwéèË«2ø"ób[ó?æ£\Ǧ¤zšç endstream endobj 59 0 obj << /Length 2474 /Filter /FlateDecode >> stream xÚíœËrÛ8†÷y -¥…0Äœª,’Îe.åžî‰ª7]³ eÆæ´%¹$*Óyûq#DЉl÷xbU*‘¬ò—ð<8 Œ'…úƒ'U1‘”¢Š•“åêU¡_Ý^OÌ“~|…mÜ\΃ȷ‹WúÀù¨**uõ¶k®¢…áIU >b¥uìÅDÍâ>"°f Â35ËÁ¸ñTÍ”v5ËX:‘%¸š&ˆ´–ùšedš®Z¶›ýõùáË®îsÆ—>‰ØjæÎ×.\×.úÅU½VÏu†Qó—)tv_w]³Š%ÒV‘$›Ôµe?%ôÚÂs×V8tÞä;¿íØC!Âs…†b…¦«!ÊjzˆÔtHX‘ëóßÿ~§™i–ý’¬ÆèÇýªŸwÌff³µùæ³™~iwmbATpù=Ó•¢Ä.”’!OíàÄúåØGç0¢Ñ˜¨†8'èfjÖŽáòMq@¶ÅŒŸ7¿@c@0à! HT˜ôRŒŠ¢rVãBòÍîëjÕtÛv-‹q)žjF ïìîýHÖ(ICx¥ÐY݈êj˜²šž&,•µ¥_‹.ò MUr’È6}ý1>z)¼ÍUÎcç\ö°%>g'”Ë!<ÇeÈH‚K˜®æ2«é¹T²¸Ä'pù·•5¨’´4¿¿‰J½ U'Ú¯.DiT•“ *ŠøA-yœp°¤ç.è›s­EÊôžc:ä‹F÷õ³ºÿS¾IQ endstream endobj 111 0 obj << /Length 1394 /Filter /FlateDecode >> stream xÚíš]O9†ïùs9‘6Æßï €XµÙBéUµˆLÙhCÂ&Aeÿýz<þšdlÜ,Ý*‘Ä=øÎûp|lŒ ¨þ¡BÂB$­Š›»¨G—·Eûæò외¡ ‘ÇW‡§Œ %*®¾„S]MŠÏåt:øãê·‚TTBªYôèßõC=ß6ÿw0ºr ãÌ'i"·EðQ@(ÇöQ ¢y°F” †aV^Xñ!¬×ëAå׿Ëbùתy¤ÃSq8âj(ìãÿªfâ¢}áOùƒ»~ß3 n$ (ä.YéÄÛèaÞ“üÍIuÞÛÒf0ÊrµMô–v—A©Â‚\AG6î¤~~ay>àª\/ƒ¡z<ܬ§‹¹‚r½h_/ƆN:c P…vÄàû›ûB'ÛâM‚&¡Öž§xk£‡Ax盓ÆyËÕU‘Oh:Î:ΰá죪1³ºêdv½Z5oiù¾áN”“za ~ÆžO!Ƙ±&—1žb,ô›ð^Æòt5cIM„ÔÂYUç@†c®šý~¯ËXm*X³œ©_›/~9Û@ V@î\Æ^Såù_3Îä"æÃSˆ…vÙ‹Xž®F,©é£H˜-c'³Åªžt‰'èjºÄö‹dæ` +íF.T68…”·—¢^ r5N 5á@0O14m«õ!迆§ƒŠ( îÒÝC€ üÓ­Œ1@Ú çâ¢Sˆ¦Ñª—‘,Q IJÐuN˜&]ѱ¼˜­§÷;ôNj?Hyõº¶i?b²RÆŽ\¦|x ªŽÇ°—ª<]URÓU5Fí„âjß-½˜nÉ8“‹˜O!Ö±÷"–§«KjZĘ˱}¿ôCû%ëG&XAx¬®É¤¬Lݬ´¦«¢QáÁr«âô±Ã•®["Á•úVÁöuë?reìÈåʇ§¸êxÜÛieêj®’š¶×bBIn¹¢†ª³z^/§7-WG³ÛÅrºþó.B”Œˆ}¥ÏØsY[rùòá)¾:^÷dêj¾’šŽ/&@E_Ìðu¼x˜OV¯ùõìŸÕ4Òf©ZÇñ¾wÿþÄ£r‰óá)âB÷yÿJ™§«‰Kj:â(\ºCnˆ»oЦ·Ž£Çë;µ¥Œìà„íÏÜ¿µ›·ä¢äÃS(…¶òþâ•§«QJjº¦‹  "JnÃØvó¿´Dù¿èP*±µ‹ì%L¨ŠÈÞØÒƒÂä2 ž‚"4(Ež®†"©é @ 2€ož"lqÑ9­Êá‚ ¤|ËMzŒ“Ü\J|xŠ’Ð1Ñ{Ö”©«)Ij:JTã‚)ñ”žƒ}¢yEãõ ¸¨Þä²£Â$3— ž¢"tHôþí#SWS‘Ô´TP‰•6öTШÀ{*´6™™Tá *:‰ÞŽ5S·¡"­é¨•ê\*ØT=­&™¹Tøð¡C¢÷nG¦®¦bCsë‚"¥¨˜mkÌÅËúK½¬ç7uä2"Ä ¦çl^ÚÅo~ÀÈF›ÝÌAxâFcÇ2!c73µíÆ´vCŠú¹9Š>ºW(AªLÛ{¬Gº’°òlü©8G—j°> stream xÚµYßoÜÆ~¿¿bí‡ðvfFÐ8ªƒuêXjÑÖöub-BwGãÄSíþõý–C)²Ž´SkH¹û}3³³³3#§´²*iEF‘³ŠH±wŠXYÒÊEecPTtUÊß’"œb¼¡èLž‚bVd1‘3. 4o¬bL ã=œW ÀŒÃ!)Æ%RFcª6 ,9eå0ØÊ›¤2Tp—§z£  R°Ê`ˆŽ^™¨ %\0Ô@x«1…iaó€XÆÈa15xRScÀ{P¥ˆ÷S ‡ÅëÍ1JZ<âAÁÖY»€ÖC•3ÙHIù<–tC³ÒÙ€­aVg’S.ÿÁÀy®‡†±Æ- »‹`OàHø˜ °œ¬òµÂTÏø˜¼òVcµ‚òŽ0.*ïaÅîmIkå£ãiR>ÁD¤Y…¼V¤ ”—󧼄N iH{²±¨*x›gEÖž°š!ÂÄs„DzA°cHy:¬užóG A‚¨!;œ@EÂ*,)&ŽXkù Á G,G¶nLPŽ"“ÍoònÈ›‘4Öš",œD1á!ë•מ¶xöl±<ûô¡QËWõûf±ü©ÛöͶ¿V»êõbùº¹îö»Us-6¼xÙ\´õóî£z£ñÂgó&~·ÀôæÁÌð~_M={¦–/ wÈ_ð¡ãðˆAËW»nuÚôê 8y¡–gÍÇ^½»?)Ù‡¢AˆÿC¶åÛmœ79Rd9Ð ŸËçÝî¢Ù ”~—éV3ÙŠm¾ÒX6Ty¬&[_¥è1ìtÞ0i·WÔ?UË¿½þE.O6u»î»ï7„êªM½ûo·^×ÚoÛó®jû§Ù.ö»3Úò¡e´%ÖÔ?Ƙ.=4¦ ßhLY_1iÀÍv¸‰¡™åfäfå&º°¨Á‚‚‚bÅŠ#(FPŒ A1‚bÅŠ+(VP¬ XA±‚bÅ Š+(NPœ 8Aqæ Žô™GÌù•µ\!+œNH¢+q%«dÆÝyÒÏÝY§–'ê Ýw•o¡´BÁ¦¨æ©Ø•te" kì¢4IÇeè\ Pˆ„Nc“rœ¤3¥“åsÞ÷Ûås!UWˆ/:è$»ÕFåxÆ?}!¾ÀÐI¶Î$dvÓ»B!>ìoGý|>¦éb!:$¥PQèVŸŽËg\eìhNˆ‰¦ãëB|Cú g»áT¡’=.ß?ùÊS˜¦+]8¨$Ñ)ae½Ÿæ3…øpx>N8Òtôd[æ<Ân«räö‚ˆ&[5ìif¶`¡C‘*+.J‰*Šá¸tæ4°)à´Ó<§B|ya”JÞAÕéŠhdaN#îB޽é¸|+‹?Â;¬á4_¡Jä*«?bœ€ö¸tÅz6¤jqfó™Ïö‰zãÆÖÎ?þù¯ÜQ ¬Õv¿^¿ûbè^G-÷H=ݶ‡ ê껨èÕk“ÙgÍ6¾­Aä¤Çâ¤Çâ¤Ç’¤’Dú$‚'‘9É„$Ò8A”Nb†$M™Ü6–;wïf¼ÛñîÆ»ïcÓJÇG7pÆS-à¤ÖšîNµ n:l˜B§Œ÷šé MŽR|ÁV:Ž|YJ˜Ã¦Ð©æ½®ÒØ Bëy†®PöHLäŒñ.ävÎ$›-T´z8NþÈÀ—SžNl¡3Í£p´aäCJBašÏŠù…£‹rO±Ò3E¹+„‡Žß…=R’8S”»Bi³‹¶"+ú9ä$a¦ê ­Ÿó:IQ™¢ÜÚ Î!€E¹Ë9ÉLQîKÙ•£ #r3|¥ôCåhyìÁ圄K‡Ê‘Ǣܱ«ÒLQ m?§aNûµ„êg&¼„R=¸˜*ãG÷Ôz¶ç ¹ ÂsÅ$î‚ÊË7½ý‚/ÔEµØ~Ò!–.ªÃï™N@(Ô¹5i$iºpæFÄLØŽ¦g>sýïÝbpÎOoä Qš» ¥Å9…94I¾Y<‰þZâü¹X§ûͦÞ}d»ûq0êÇónß¿ÕV÷—M¾ý¶oöM»}ŸŸ_Õ«+äà‚ðG çä}מïûqàÏûö¢Y·ÛæZ@¿ðýPÒÕÕ¶ûϺ¹x¿ÉõÀ(Õƒ—³~Ù^÷õz]÷m·Í õöb jú[ÎÓ¾ÞõÍ…àýñá_eê/wÝþýe~ü몯o«}KåÇM½ÅS;ÿºþtÝ7›i!¾ é@¾—õv_¯óˆö¾0Î|;À8inšu÷áŽJê0Á˜ùv€ñk½M‰Õ¿Áh0ÓŸ~Û·««#¯Å߯ÜÇ {쮺›ì²noE8x{hƒözµkú滳v3˜èëÃwl_÷ÃÐnµÚ¨·«OÃBïºóú¼]·}Û\çoŸœœ½üéíÓqg}Ò!Óóv×_~wÑÔýå8K5>=îïÏ? |6Ã^Ùî7çÍnèßùzÓ^·ýöý9¿>˜ó÷aÎÓÅÿ­Èb endstream endobj 363 0 obj << /Length 2160 /Filter /FlateDecode >> stream xÚ½]sÛ6ò=¿BÔLÄ#>øu>ؙƽNÒ¦µ¯37i( ’q¦HAÆVýíbŠ’˜ØN}7™‰–Àb±ßØ]³YÿØ,f©a.³Y¹}ÙÕv3#à·«WÌá-q1¼¼yõ··qñ8¶Ê~åÍ~`vY,u¥;­^¾Z·mË8\¥˜X†—¦iwÈêËwU.`ÊÎ×pè†ÛþÝôíˆ!s¤: ð;mT‹Ñ˜£-6Ðyi z×£5ñ·ƒâœf|GÃ#‡}]ÉýprræhÌå“F{YÇò‹cFà =·Í‚C¦±Ã‘'3+ÕhëO ¨vkñ#[cíÙ“|ÊÇý²Âº¼ƒW—²8Œ8?N˜Q®>¼Ã· óö34d€A?¶J°Ûé”ñ°QêtÄÍáiŠrÈæ¨8És{ìÅ}bº~JÔ·p¾¡ÔÄvnI||Óì°ÉÚ£¾ëÍ'.…þ•ìx™8e[¤P¤<™mýÛ§D½Ò혗GÁ¿035=ñdßT]B´Pᷘ¯¹uIš¦ž™gadÐÎعÌ!îÖ‡Ù‘ðÍh40WvÙi^SXã¦ÞÚ×'†ß¸x }îÚ°è[R„ýkD/) ó X­´M´}¯Ç³Hšåwº­ž"ËA /û ð¤”Áõ¹², Ó,›åPáËGìèqò„ Z®®ýXÙa!§lóñ͙ܶÛíá ¯t­Ì§×î r?å^F,dyú$î=îW¹?&h¹åIÈã“Jùkbloë—žëO¡Ó9Jnöä?ÅŒj¶ó?ÅÀÚ©µpOŒ¢R¥Ö¥¯Ýv…¯ï¼>+Ußû ]ƒö=õÖ¨åÿòZ endstream endobj 368 0 obj << /Length 2502 /Filter /FlateDecode >> stream xÚ­XëoÛ8ÿÞ¿Âi RD‰z8`“îi·ÅÞ&Åp{8Ð2m‘E¯u²Eÿ÷›á¶ä¨×]ààæ ‡äp¿Š/"øñE-ò$ KQ,ªý«ÈrÛí‚¿þôŠ;¹ƒ‘äíëëÓtÁ£°ŒJ¾xØŒ·zX/þÅâå¿Þ.’¢ ‹¼„M,ó÷A J7[œ{õÃÃiÿ4Žÿ¤"(ù M8/Âb‘"䉠sß›V5fž±÷²ýÃÔµ¼B%`m1^ ê–guv Ö$‚ýÞ¨þhÚǎȇež1³L93õj™ÆÌ<½^OØ ¤ìÞlú£lqJçY=Ê­ÛncZü}dEàxò”4øp>7ÂÝãŒ5²~ît紟ܼÈÃ2)¼öá2HKÎÞíd­×Ë )bvS·j+ust)Ø÷ZõªÅ¹„ý¨Õ¾#1Ù8ùèºÖrOÄÛþß5¦ïU8¥éLRšÓÉ«eLÕ=“Šˆý°Ö½i;KqöK žˆsV)µ†»ãÝÊ’ñ¼ßÁ|±»f «A¯FöÚÀuIài6 ÜX)¢MCÿ7h^W^•GÍ¢©N÷½±ZU¸ùNv°®qˆ «ÍZÕèËzX‚=I6‚íš‘]@àæp¨áDT¯#ÎoQÝÜ¿‡•ƒYqÄ#`sZûF¶ký[Ä4}T°ï®&j’–o‡®§ãâ3Ï®P5aw²Ã„}B¥L=ìXÆE#°Ç†8?«ªZ7ýÁô¨<Îë†XoÌþ0X¯#u_i2)gî„ûC †PíÕœ!ãQü™[ˆã»ûÛ8JX™Ad"†ei–)E ìQ¤ü§ae´×݆–<Û+ ´ÓÐ)âÞê¹áŸWÄèwº£ý à8ÙJ÷ÖD­ê‘§_»DÉÆ‰p"¦ú|§›Ck|T~öXEvà<©˜Cý39æàß¿AðÆ)ûì¡ 5_fmÙë¾F7e éW[ÄÁÑq|0€4eº¡?‡2nÅ a°ƒƒ Âäbt‰K€±;pq “>¹ytª§#ÍÇiˆ ›+VËÞT>߬QŒO5{1URÌ/{¡ª;yœuW$îPFwÍ1uFŒYûcº:Kº³‹0O7Ga–Ú%¦=R6îýºÐ™ÿ:³Ö£3•E‹ñm=àúŠ©qìz2Bj«¬ÓÉ!õ x>Ÿ•DôçéY¼Ò¼ðaXÕºÛy-ü_æð¬S­¶4¾ï ¡r…Cé3BÙø!„š×铇Âñþˆ‰_¹$Hw‘r€dAP6«¿ÂböÞõýáõõõú)\šv{ ‡ç×Sä+‚ø?_QBw«æÂè/Pó‹ƒÍÔù2WùçðìÆÈ”ëgflÝÊÍ’³ž(¬(`qy ÊÝ-©R(<9srºsóÈû´L3&u-Wµ›–ío‹!–Ñ˨+Ð)ûUÑ)¦í/û@!@ÿ$Y$yÆQü^ÐK#ñ™~ðrSkœ·?¿¹0؃H±“Ôm7¶6Öõ¹ "ÂXľӲAwJØ5þÅô—°ãñHtH´n˜÷ar½24 iB÷“ý.ÈVWª¥=Vo‘¬´ê€¶+‚õ {YÒê/,riGgÑÉ0üÒ}<+¬Ì‰(`ÿ†û¼t0Ÿkç/6µ§cO€Hh#lÕ²}FNâ‘<‰¡¹UÙö{Eí$McÈ'q<‚äÞCNTØi*vùÇFÛfKµXbø™–ú-nMm¶ôXïî2Ž»JâÒúÔš3Ï0O‘Åx/@…8ãØ™Ÿ‡1€A†ª5Ër´Õ«¡§–4OÙOƒ¶eSÍ6þˆ0eÈc÷öÂ-ðδ…íQSîÚ×”s¶¶ÄiÏ©èe—gÞE<ÏCžŸœ/ë£|žÕ$ÉCPGkÀº2{q]« ›><ç-ŠMVLz?¡†Ø¬ãL5¾‰šÎ!lÍõv19-.òxüò|å8°’Çe H¶U®û„²çšMIÁ:³w¬íÉ9®ÛÌÄD#…iTNÑžù,’ÇaœèÜ#ƒnçY¤NäN¬cC¹’¤u$z34FÜD@0j%;·Úãz÷\[zàƒ}Ù*Œµk§ŸJ®×ƹ£†¶¼™ínmsž%§ã‰Ò}§ê ö'`·/óµ#pΪ8t=QNW·Y3±È²8=ƒ{õ„°;ëxF'S2£»ó|K'ô;Ù{Åé¿’ÍT›þqÉÃèò¬žúVV=6) ÷z„nªzX«eolˆ"³Á»*2…­«ÈÚcŠäl´’5˜0KJv¯ÔÅB¸nçp(oýΑØ|zñ—íÎWýÎêrVÛçb8ê.|)Ôó¿êïåã’\+Š”u¶AÄ4øpßžEɹ#ŠBçP>ÙÔÅ–bÇ2º÷ƒ Ÿ$¡@È=6Ö˜³(K*(öë ö$÷-¶×!­^ÚkÛˆ U¥Îô‰ §:´º¦uïÖng†z힬¶+Rj,ë¸S½í®ém Ê; YkpG眂¦d…ÿ· ðË ¶z€f˜Þ€ Z~³måa‡Ï7dµÊ½©:¢é[ ¬krë ú@Ô×[ÓJì‰YAø•æsF^à%ûþ2 gLOåkrÁY§· ~\Õ©Š ›>¸øFÈÙ´fO#Ê´dh˜óƒ§ñ}*–9ûHȸ–½:ï2A¶8AÐÚT×g»…ý“žõEí€5X\Ôî½q-j‘BŸ_|†8 d·Z¢ý¾­üRÑw9È$¬Îw°Öjoˆ5ýè‚éT ÿðË.dh ú~³Ø¬éj¨éµ‚SzêNœ[íÄÜmŠ«ö¦ëçÊÏ)ì0Lyìj&  XÚ8}|v´¡©~n‘U™¶…üõ=\'lAÆýÎFǺšÄÎ<8÷âžÈôÉo×™}ÍR¿©7Ïþ“—­>ãO]SÄÙÀ»Ë} ó,0 ©íI».¤ðÉÀ·Ø£B–ùÏ¢ÊV¥<÷™ÙU]´ÈͨJÁ¬ÿÈeÇî#Iø÷ÒøY-vXfù¢ŒÃú¬ÿý*ðÂÁY𓻨Ò^eo• ÷NŸïì£*Ô/™¼ªã?§“}¡Ì´˜lxz!f@çn?s‚eN/®ÍƧ+0‰]rÝÐùb`6—Ÿ@/šTW¬+A¡ Ë“º?m¸j×ÐÖÊ…–ob þGâ®<ºÂÌ"ýàÊZâä…×Û^÷Møa'›GŠ5´÷Å– endstream endobj 194 0 obj << /Type /ObjStm /N 100 /First 875 /Length 1640 /Filter /FlateDecode >> stream xÚÕXÛnÛF}çWìcT$w—»KAPY¾4hä:–´uŒ‚–66‰x‰í~}Ï”-›­¸èC[\îΜ=sfxòH2ŸñÈ0‡™ð9ÆGÁD}®˜5“s~Ĥ™à> 0'¸d Á¦h¦´Á1d*" δ’8 ¦ G(ftƒCˆˆ…{HŸEt.%‹tè°(¾4Œû €¹‹ yÈ@`@\WaÂF!š78p©"G¨ƒ^ Ù9Ð@Ö@V0r%ᥬ v×@Ö>øk kÀ dm°—²‘ÒÈÆÀ <äÀ!aÃÈ!C ?$/¨†@ŽŒCM9 •#RK|Ú ‚ÞÊ<fHqD)"’ìD‘Ö!“$M:s /}’1IÊ“¬—HGIxI-YKvµF”¼VVaô 2'A5 à¥à!…O‚˜8) ªˆfH¬€;R@b ‘¤$eŠ”œÄ¢¼ŒBABò¢œ…(‰tC²Á^!ä•$_vé†"Ê‘”ûÈ€3„@Ø´O|%Ò-}¬KEaS\ŠBB1JE!^*Š‚#~ ‰¼""g‰"zÈ4œ(íœbÔœJN”vIzê€ }:ƒMD¢"ØU‡g *‘ @ù¾óö-ó&Ì;ÊÎ2æí³WgÉÂâo6¯ìì³øövi§e3.²¿³*OiX® ÁçWûgãÑçׯٻwÎ÷¹¿îì>¶ñýr}Ìè7¾,²|Y&YÚÝpåqöÈcxïÑÝã0É‹’Œ–qQ€fO4÷¦'¦g›™²´LÒ*«ŠÁŠÊ8οfßh4ºŽ“´h0w1ì Oʸ¬M³é´ZÆéô® Ï.ãËdž”ÉŠýhýNÝö’¼¼Ìl\^·ÖS[loìöWv']ïàÙòYG]·žçYÑÜ~{lÃÆö¸‰ä¤‰k@ÇÖ˜ÆÕ¼L–=QõtДØ5.%wKµq“ÛçLljÛί²<)¯W7ëÍKݧ|V¥³:ÈaÏuß0ß-Õãõõæ¹/ Þª`·¯w°t´.ÐOõÒ-°V‰®»ñ2ñý΢««`úÄÑã\ån®bƒ«ÞÍUv]Oí›Ûtºzí|ÃëèòZ´Eqü‰ ŽN‡ê«æÓÞ‡÷õà ‡ƒãÉÁÆÚ©]Öž÷éÌÞÞ¿½>ží¾²Téýmfͱ; OÇ;»[Zæà}ÅñèÍØ¦eæ„ÚÿSÇ;µ^Â`ÝÜÔSc;Kâ½ì–û˜ÐheL$.@@Š yc6LÓ Hçu…F /°yع¶s¼IuYÖç’ô«ãíeùÌæÍþñ˜–ìªë£[DÏæ†­•1®¤s¹FHØ Y_^¼1µkÐHGÂ¥Ï]ú6Â}é‚oÙwüä²*Û'ÇQ•àf–¤mí´TöÙ9µš¤‹÷û2´÷ tZÍçÿÑF+ãèŸÙ‚UMõ-oØØ¢“6íPѧŒvŒÞms;–lˆ 7åAqxÔwL,4Bí2ïÌÞ–OsÜ©®°[]ú…Õ–uu¿=ò¶ÚTOµmÎr(—¾?H#]ú> ÚôP¸Æ„O …=düÓéûæçÕuY.ßxÞÍÍ‹÷<<ñ²>Ý*M.37)=üáÉ`óiì•vzbq>Èí2ËKOøÜ÷pOM4øÁÖŠÝLÇ•æÒÇ–š·ñ]!åÁ;Ð.§/e:tu¤éó ôÿ¸K!ÝHF®šš»ôÝÑ÷]%ÕNôq2/³7‹ Õ¹‹8ÿ'›ÏãŸWôW|þεÒ[ endstream endobj 375 0 obj << /Length 516 /Filter /FlateDecode >> stream xÚSÁŽÛ ½ç+|)vÁ€÷Öî¶+µZiÕúRµ=›Ø(ĸØÞÕæë;²JÛ=T>x`Þ›yošøhR‘¤d,«ø.iN²îº. Á—» ¸€éò}½yóQˆ„’¬"MêÃu©ºM¾£›^޳r8eŒ!ú§œ ôu9¤{Æi^•» 1ü³þ´ùP¿ôyþŸ‚<òEe‘Pž1^äQQ±ãe<(¢é(rô§5˜åè8XÌ(z2ªíNjðñɸ¨.ÈQ6¾Ù d§¶þ@º†>γ“”‰*ÛîYFE`í=Îõ«GÝÿ°uPªÝǾbU!§ÂP¬Ã0àä~é¦Abýÿá>âì®ìVÁ-*)A=”ÑFt#z9Åf½61aMºÚ Q?½XÅ,n𔜣[­:?bR@ØÚAnÃÜ¿=z5jŠ©ÅÉ¡©{éšH¹[äùl3·'=û+îSŸ­QÓ ¾LÔ…®×õj½$€¼—çWµž—¦±ÛðŠbOÆ8zðliVNg—Wô²`øš endstream endobj 379 0 obj << /Length 49 /Filter /FlateDecode >> stream xÚ3T0BCKscc=K …ä\.°hQº„äÎeUgbl¤±*OS endstream endobj 385 0 obj << /Length 2080 /Filter /FlateDecode >> stream xÚÅXK#·¾ï¯Ð±¨æ«kÀÀð.ìƒ$³¹Ä9ôJÔ¨1RSîÇŽÇòÛSÅ"û¥žYÙ$;ÀŠM‹ÅbÕ÷ÉW1üñU¯R)Y®²Õîü&v½õÊþð†{¹ nF’ß߿پ×zÅc–Ç9_ÝVš'L+Ýë»ß¯þéõßïzóÃ}¯H qãŠ(yµdš¬xÊ× —£’L1.­&ÖˆèǪi‹Ó©hK[­72ÕQQí©ñÁ´mY=ÐÇ_Ú¢nÍM$ÍŠI•Ô »UŠ 3þ’êöXÛîáH¿ìÚb-yôÿ3Ôw)vøõ¸NdT<øÎsQAûl*j©¯ynZs&k¦®kxθÈÉšû#j‘2:ÛçJÕfºDætÁÈçµH#S7d&t؃WœŒsÉ6cRü[g:ƒîY°AåL×½dÙZÎKÈò1ôí ¿æ§õ,ò¶î-šôT­yt²ÅÞìiÖ¡¶gp¾ùÏkšÄ£Íûu¦"[ƒÓfQÄca¡VI,Y¢ù")HoFâÀSgÌ”ºÛöÒ¼Ýn-X÷Ù°ÆvõÎÐ&VÚmpØvn “±¾ÑÀ }m ^2Pg˜iÞÀwû}‰ÑXœÈeÖC€Ç¡Üq¤tàwÛ…ó*Ú—Ü«8ty«wéWœë…zß‚kŸžžØÙÖ¦²ì\ÔXH/Vg³mì¡}*jóŠ›sŽ»ÑÐ |e貓µ`Rø„[gAÁ¿–²Ie,¬º%™4Ëx/yGš°s‹ÁÿDGÔMã“€¢5¡¿!FrB³õ&IâèÇÈ =£ÛÑÇq’VØSÐÏ4„ô"4„ øчŸ?RÇ(G)’`ò~ÐZ™–6&ÔÔ¹³Uev”¸Y¡§Rˆ‚®WœË5K2ܵd<$çíx5‡™tð¦ˆ=Ÿ{øº€èÅÃj×Y@w{ ˜ç¥ß.Y¹1$0Äa"4-NØñ–G3€aÆ´ t–Š`çå–ÓàŸà ÷±q€Cí×ö¼`ˆAÙduÇ*O†]ª< B;v =•¸(Jì)+Dkó““Á8”kƒ~`Eƒ|„íÄkü.ªp £ qâ‚ e¢˜ÎÄ-i´ ²“¨@Â…Õ×Z{ÂÅäz5Þ»ûT샡ß)FCéÉ5 «ášFϴ챬 s™OÏÁå&ÍJ)ò‰Ýoe½îã•mµu4ŠÝÎ4Í­9dÑè/ô5çf’8‘ªÝÀýî$œ|{\Œi §ÌoE}­€>YgÄWn—•\øÀÅÖ+ ’¦,‰“Ë!ú]”©8|íÙPk_–¶¶~Æ8³á>[pÐ%6®sb÷P.Á‡‡Y zÊSñéä»[ëI@$,Ù4ðÛP•ƒˆc¦±{rF2¯' êȧ“ɻSkê * ŠÆSØœ£úÀ2¥ÀÃÆ¯1W5B~Ì >ê|!çEœ1ß”ó@²*îq*øO.ªP9å8¶¦µä¦Oïoa8ÉÑ‹Nl)€Ü ŠYÁ_p©;»Ï.@¥¬z¦ö<íJøÍS¹7³Œ õ HÓtæNñÙÚ†asU§ˆ¦¾”°_‹Â‰l\ÁÏÀíìᛳô×XÇTgœÝvžñ#‚Á]J,õ4x1£æZ#5$î1%dÌS: ä—zï¢)ÆÒP1ª¬<óø)“ë\?Éò‚Ë>¤ct„mqu2 ác Q·kp-µ'aЀ;°`S"‰ÞZ´•&–ë"#Šhè;t•+šü„Øê±?°»'$¯¾D°Y<¿h÷å£Þù¿¹xÁví,Òý¡a”Z?ÔW}¦xœ°ŠSÔÁʦöø&É ôËÔHe ÀØÃÿ*ÛÆôx{æñ˜³T§S[¤óx•¹xfR|b–sKÙ´‹(œ°\Ê Þ£.€èrùÅûB‘íÑõ9 êÑxŽô:ÆÚ–œ/8ÒìFFEoòœ‹ÈTâÅpœãÇ¢™¡dÙ[ Ÿ)5y)9 õJÏ#N£«Éu¡‹ïS"¶î«×»…LšSJ«Qlú陋+n¿|{‰™T³JÛz(d¬Î¯«¼à C‡ÃÅŽGèi-Fž†i³ÅYΪ¥=cŽˆ[_|SÕ3ÕPM8‹]5­9ºcßP?$ÃUŠì)™B¬£d•A•¶ÇÌ|}†=ÓEö“EF%Ž÷³ÜòÝ…F›]]"ÓàÖ¡]Ó9/¹»ÌÒóC,Ü Â¶ÿ¹eP¿,ø(Á‡Ûž~¬ßÈǪü=0J|žtKðeà‹×0íQdœRàËÉ´&0MmÎcw,ˆ é¿ÿÂ?<˜„Z ßrˆ³œý>%»f”q YÃEÊ4O®*‹®šÞÓ'¦¤šåy>+/–ܤIü?¯Àƒ®’Ÿœÿì´ endstream endobj 390 0 obj << /Length 2543 /Filter /FlateDecode >> stream xÚYYÛÈ~÷¯ò²Àj±/Þ§ÄŽs`'»1”§l€pÈÖˆ0Ejy̱ùí©êêæ!SÁ€Õ¬¾êüªª‡oBøÇ7i¸‰¥d©J6ùé]h©íã†_þòŽ»u[X¸­üÓþÝî³Ö²4Lùf˜µ/6ÿ¢»ÿìÿ¾‘IÊ’8…C,ñ·Á ¦¬qîÝŸ÷ãùZˆÁ•ßpG®˜T‘pœD‰b\*ºT0q·Õ‘îï¶<Èê;)‚!«î¶2ÖAYw}VUY_65ru)ÈÍSÆ…“êo‡»­Ð*x½IÐ ø¡ƒgü€sáÿž¦û†fND…ÛªWšq÷¹«¢ùU\EL…jMW—\©„éTø•eMggti>t}s"R…Œ$Anå{ã8œó®`¦¦]Eƒäçºj²Â q4nµŽgÔ†biÁ@2®‰¬†-RÊ`¨ÏYŽç|Åo¶'zלÌóÑ´æI†šI#–Àyš¥‘;n“ ¼<~§‘WÇ–3Á"+Øãï–¥pÁK^¬­ßùÏÝš:q¢#ǃs›Í%»IWl¦ÀÏxì ÁNk§Ã¡Rr¿æ×«Êtxª- ÏGe¯œÅŒÇz2tׯ Ó\úeEÙš¼oÚWº¯@#8JÖ>šžÆ a ;΃ýÑ ³Èˆà­­[ùsÞg¨‘'üÏ8oˆ gN×?—ý7_JÙXõÜnÏW”¦¦5ÍÙÆ'ÚÐoV ÓEšüÔÎx±`¼k¾q¶¾3Y ÞGš8gýÅŽèÊK¹/¤·´ç²ªh„V… °:Ñ)‹!8:¹ò–ˆ›">eJØpêë(¼²$ÍgVC È’ðÂÃéÉP¸€ìï•°ë›Ý÷˜Y—Ïw‰ ˆ[ªÀ¼d§seP›< ÊQ¯hr„ˆåZàr ‡Óv &<½54(ëÕPRL'‰ß»ºvW5 ±ïJÊCÀ¦)À<#‚âmAqàC†ä,ñ"T¤ˆX¬ã ¿p<4x,ìxîÞ‚Èïï6¡V͇™ 9™düžg¶÷DšÍK';z  Fé’ÆL"H)È…%UemܪfÍBBpPöh¢ÿí Aº"E4z̺ÇCªéÄRJàü×P‡«È¤çÖþÃÚ¹šÅb\q-Z‡¦1“³o Ìñ×í–H¦ ¬Yˆd¡JIUvdh€Ü­gq(Þâ"8ãáÈeG7,Ç‘ŠÂŽË:Å·˜ cº‰]Ï£™lcÜ[ž|ŽI`×E’ùޱÚpÁdÑïkÖÅŠçÖ +଩MKŸµ1®”±¼ãag›HL^^'_óÞ˜ÏÁüjZÃÑeZƒ{ü¯ À•æt + F.‹]à-bBI0­¸/y%–¼2ø„Šº“ðÕœO¦ÆaO¥o× màùvÕ»·Cò¡ÅLwº8’ÌvÍM¦ÐB=Td6›Ÿ¿: 6®`ô½}M9ê–Ú[y=+@jŸe…ïõ·³eS [µˆã*r&JÞ8~n# ¬¦gm´—Є ® ¥8%]Êêó‚ojcðÔçcéë ü,±šÌœXëá„/\Ù ÍdÕ#¸m-V5¢Å2Œ¤zÆá+ þazÛiÙr°EwFªãGL¸‡^1pDlÀäW­jèÌÇžô·ÕWDÎçk~ s!¡á_~„ÏØ#;ÐQZºÐ ”Y»o?A.+µ#–ò¥Ð›–ôò®±Ý—öá'ÑÁ}Ö~µbSs 4|<:T„yì‹>îï?v؃éÐqÉê·¸žÄ¿¥À`U7"…Bt¬ˆóþ´ÚÈ Ã™rð<¯,âÓØñÔEú ‘.<š˜àÊiŽ}Z„â:8€KÍLb,ùTB"6½ñ:â %VG@u[PGŸf:âzá;¸ÄêgUÇ4·®­E÷[ܬ-8Ïkk yˆfˆ—`Ø››Ápž_}¿’P%Lååe¨sν[3t¦¨ü‚}I»H'ÊrÙ­Keù\¦`ódª[eK™Ä72 ¹xfc‡-üS XÚöŽBR‰³Y¨ hžÆu‘-T_@èÕ×߉]犿Ìk_§Ú~¬RœÓ+›±/uå±G…,DðE_{­‹)üÆŒ,®gä ¾ƒA æKí¯Ü*Ùô¶ð½4£C69ÿ·­a ±,Ïh¯Tx˜‚QFs÷™lCùÖ-²é–ž#à“^´`íÔUÕ9.Œ¬ú`³¨­q‡Ü­9`<ÖgT\m“ØVë%–¡–‰…‹!2~ùô™î þº¿ÿ‰H`óSÖ#þ¼§©qÍå{ ,6/&zãæ)ÌâE˜Å>̶JÇÞD—¾¸R'Ó{»«õFŸ+¬zkS¬ÖÎáÒ¦á«ñúe¨kºR_N(r"5ºì)ûjnN-­Æmju”c¨+øâì¯ÖÊ 9/ì~p)B»çÿG5ûÀМ·•ïeinñw𡬊nñ†¡ÐïÛlªï /þÔ@¾qn}]'àˆx WÓSŽñÐî‹åøå<¶sÇžp›«èÑÉe=ítÏ ÿfÏ“ endstream endobj 395 0 obj << /Length 2652 /Filter /FlateDecode >> stream xÚµYmoä¶þ~¿ÂßN,žHQo)ú!¹äÒuæü¥HTÖr½êéeO”Îv}g8#­vMw7 ERœòá3¹ò*‚?yUDWY‹BçWUû&rµÃÃ~ùþä~!t W=¿¹{óîC’\ÉHQ!¯î¶ë¡î6W¿ïwå~4ÃuÇq ¾ºµN‚:;–MSŽußQKÙm¨ð½Ǻ{ —c9ŒZd‘Ç*È®¿ûñÍww‹?‰R:Ž=_zž®=—:éUšk!cMηhð4ÂDd*ƒQ]ð·HêÆØ›ë0Í8Œ4J‚qg:*í‡þ:TY°™*³´Qaƒ-yPM-t†ÂÈ‚m5?þö–¡ÿvwûw,é`Ûm9¢ ó*”± ¹ö[”DìÿQœZ(ÏþoúêÝçÉLæ\ì7[_ÀE"T&ç/ÐϨJ %•wØÝØ6Þq3§‹'7´äƒ±{7+¦ë/8+¦y†P¤ðY…‰MDšx!rUÐPÕÎTŸ¼K‡+Ìö~™ºÎMgYð/ïDå¢(–þmùÉ‹¯Ÿ™/õ–†~¬›KÈ“©¦ÑPu9׎Ǝ–ꪞaPwzlE`bÆ7ëQ$’l™ÃËñ*®Ã†ýaKÃ?£Ý~"(Åð1T©%¨nêí3|b,Tܯý–ž%„‚㺗íÔUm|«»Ãž˜$àBªJ5pÅ;_\°™µÊÄÕ ¦ž¯ó±¤Ód‰ 8' 쮟š Y¦cG1LdÂ!K’WFeЯ§§éì4®ÛÁÞs¥ÎµÂC?ð»ÁIàþ÷Ž ò¾Ö´ÖO°ÃE«4ø'†€nc·r6W6vq¢ê§¡|@Œ YpcˆŽ½ŸÁ4Ô÷t*GÍ#°BÌ”*Às·éÀ»ª`>ce„ôB½—åƒO¨‰cÏgÿpì~®Ù˜ÏS97 ¼¹N€½šzuÿ.vû’¶0§ª1€ OX›ÚŽ/mç¶ýáVû·¼J™gËϽ[~Áê[¼È?¶„Äyèä(¢Óñ³\DÅšQÀs— tœøÍÀ¶RûÍø,èBh¨96Qõm f,ÙqkŒÕ“5lš1ªf,Ò'ÐsÑ„J«`ÚÓÓÑäÀt+C•‡=ë^]\XØfO¸Z¹øA ÏŽKÜ7C…[lÇ©‚*kn„(`(‹N{Ú‚f†Ò(#3Kq¡bª2Uº?SB_‡Iª‚Ÿp •àTKz%K‚÷àV,ñðϸ"zj}Ó9¼Ë9eÝö·|ŠOŠ [0ÁÐR‹»ø€\–æ Òæ<ì]ü\ÄñÒs_V8‹ŸÜ†}`ó=óÖ3½–ô@€ôìFWÒ P}Ǽ—,jÀo$6)ƒ×¹žC!øÈ¬J³Õ.†á /— ¼<»ü’Óô`5dc(jÄŒö/°4‰æä½0Û 8³Ü¦’_jK=Jn ö}¢ÊÇ]M°¢×ºÛÔ°£C°Mi¹®ßú Úï¾1­%œ¹ïbØFÀ§àH…øY)àÍÆaÕ~Å •ÀEEBf3=Žmž£º˜GÈa¨3¡qv¨]šžÀ~²!y„ÆÇm9|r‰”ÖEàp²b}ήùœñ½ù³}UƒM8Ö-OãKÇ‖ s¹êŒo<™ŸíõLåjÎŽ¨ùËæù?´àÕ:Û˰¡5=~²ìDêølG‡ |A±Ž0ûR#ÍMj×Ç _jG—ðR™.ô™,*äKÃíþÔB¬ÂÅ×CL¸$q1ݲ Ÿ,ír­Dš¤ŒàÂkBk T‚SäðòX;*Ñ2gË2cÝ ð®@ÉÀî?ýÐ@ OžÚe‘k´/å©Ð‡Ž;Ë7=*½m˜ †Oôá tÑH3ñsé"9Ò8—BK}ÄŒ’Šá4\óÊô{œC’mX¿í›¦çUÞÞPí=Ö<ÏKHu@95}Kõ˜\i%S`ŽˆM;–«lÕõ¢ÒBnj¥õݶ¥ÃïVcL„÷¤…ÏÁó›zwá·¦Ù»=«è ôÂ]¶.ž±–Öiu—g7.¥ÝÐ<íí9ƒß=-'n÷0{Ô8Á¿A¬Á¾é(ê‹ ÏŽå%¦qÈðë9“?yÍe4y”8Ž–ƒiþ„dòÉ8žN5¿Ëvߘ:4mW:äÅ>ŽÐ{éšî½ Œ3¡ô¢µ!=s–¬‘|ƒBÝážíjuëx*Lñ޳k ?‡ú‰ÊÛ¹²¤‡ËÔeê<˜ M³tJrwQu” îÝÎØðÎ(ärûTBP¢wwã׎ ue!×öJè¹H× Kèh“¨ CÙÙšÉN(‡Êûº©Ç™Œ Ó;–)ÉNeâcNúqš‰\æÿ#b¥óCÄNÂXë´güÔ»C0t೫+™+ÍSm¹v‹jhNL¾„¡µÈââlÂHDz8‡½vk •˳ãh(” ˜äú‰.;žN|±À-}rzà.ßë¤×üôš ÝÓý@¦Ü<;Ñâj >“9¯%Kzj[º¡sô[Mû²«ž©î°Úµ±TE؆Âû»Û÷öÄ·Xwã9Ö{¯qgãÒj cN/†e¦Üu¤LHîÉ™Ëá¹w¸êî¹Ú>ôåývL\õ«O™¾wrå÷게1£ë@ÊSÿcˆ8Õú?÷>ãÿé ÎÁçx íf@äÚ/3ÐV»Þ*â) K¬½æ(¾|´’æ"I ¿¢¸ñ9>\M§KæQÉ蓆=X¤56|FÕ¼(QìIêZ`Ö(Ü­ÅáæÍðÅ[×¢«@95 ãÔN>k›" Þb0RžGñIöpuuñ nüw›±ÈWÓжÒK® Žå‹ÜÎj3çTd‡»ª[4þŠG÷¹è8=œ÷¥ßG`¹úܵmûóÑ;2À´8ú¹&¸ç ïĬéâ˜Î|\".ö <†l}† ¸w¸êîã‚“A_rf.øx8:3®~õúÇê𢋠»PÄ¢øTò‚ j•\ÓÜûLL§ƒñCª€3ä1AÔtê  w•§‹¨rwàéL*K˜.°r¦ ¬}•. P!¹>`ÐO ô×\D˨ÎÖêÀ>,‡Ó E¡ >9MänݺÆn|¶Jº°Àß´ˆOŽbn™U/¿Ä«s—¥ŠÕµ¾>î GUòÌ“A½Ôs oè3 Ç;’ÂÜöÚ¯z*/„ΖŸCÞöo}S&³õu5‹„Œ5r†÷ܽ¥Ÿ^·”€)–µy[ý!C¯¬Á oé¬IœoiÉjé ì´kKÏ’sŽÀr5Ù±oçoø¾‹¯N#œáSuø Ï^ŒÚ³!w¶œš±Þ/Ž isƸŒ ¦‡»øöBãˆ`8y‚qèï±jHà HZÐÝL,ÿ©Æ6 endstream endobj 400 0 obj << /Length 1852 /Filter /FlateDecode >> stream xÚÕXKÜD¾çWŒ8y¤µqûí@Ú]A`…„B=ãÞYÛ=ø‘Íþ{ªººý‹½á„æàv¹º^]õUõ° ?¶KÝ]ìûN$»cùÂUÔú´£Å/¯^0Íg£=â¼¾}ñå·a¸c®“º)ÛÝÞEÝf»wV²ûÃÎOR'‰S¢ˆu¢yuÂo/¾¹í凞·Ñä\·$J‡ù)Í«,?òV4{Û™ÕÞóW.¬‘îºêØæ²"rÓÏ{ÛK,Y· ‘Êü“Ȉ·í¾=ìÃ-ô!oïiu€­±%Í«$QBËæ•s,dC"]ëØ5­,ÁfÕ*jlæ;,$ûoÑ8ø |Ǿ§ç: ÓA·eck¶IHÂØ‰Ì¼1]€vß·8BØJ R«Ú3KY3ñôroA0qv«pÄ=u4`ÅI"é ÒH‘¼Ó$ @Ý,¹h+ãÑM/ ›å³Ý,Ñ®hó±£bÕÃ0M= ¹gãàŸò0òTlvê¸~v7*kž>¸™©[—ÏS\â‰OBé®j(¬UݯuñM´ÄKÙ6ËM*6ˆK_l£Cy:wvà9QMKëÁÂK˜û[\yÖ™×-ÑP>[bòFˆ‚䊗zó‹­5Byq’5øQj¶²©?ÀÏ-Gâ]œm4вœŒÁ>~b·ÌM? v¡:,^ƒ\ÃmØ`w.”ò枟[QS”C ú»Ÿ© ÊœˆòÓ Sß_ýÌOº¦üpîƒïzN¤}0Ü+>Ì…*×ö˜–8Á_~àké|Õ<–çVBõkײ«2W/›|3dšÃšºk^ðêh²ÿ×Ǧ%)ÓŠ7ª:­jz% „Úº÷ ;ˆìà”Ÿ¡å¼ªåíõ$l[!nUî,u×oòVÌÆ·þpC÷Fù+¶¦70ø†)ýq†Öj^¼\ãÖoûÀ«è´}R¨SC;^ÿ¶g̳®”%Š:àÇfÌßnÙÔBáY¤ô3ëj3ʺŠl5Fø ÜOj$ég“ÚSHžÙ™0П† •¶ºUŠú#¾>cÄÙÌÏ«5}>×7|ÊKn²ç?DéPÈ­aºþñîvhš…̸“}Q&†èˆ<pWä~$_ç¶×—¬ÈúõT">”_tƒ™&áôÊ­Åe”®çÔ6µŠ2N¸J<™ebH¯`ž^ÿ6@„ uÝoGí¥ñŸY .ht€oXî@dH¤rGªš7B0ë^hï£I7÷“È[ºxÍ$NņóÌ)ATž´ÉM›…^Òí(Ö·#$Ñ0æ`qòRÙ¯»;R£àk¿Ñ=(ÏcŽûz`adBGÃZâ¢xB)4¡…à4¾Ñصä:¬}H’-®‡ê|\Óèí0‰ð Aêz½fÌÒŠy­*IÏBV'5æÀÇLªø»r„CÆ#šIañ€¥™-Œ`Øð¦18P¢o€×¥Ä²¤fDT±‰B0­íêžQ…Õ6èŸX7¼(¨¼á»¬mRƒ/è HíZ »P(ßÈe Ô¢‘_¿î@]ïàUÁ¯+åÙýµM£¹@_ àV–7ç‚Ód«œ{IõF†áýjØ­0ŽâÂkÝ–eU<š•ÞÑæ¥f×̵iMþ\.北8 ;T‚²Z[þQ\²¯‰JiŠ-^<WE ~ÀjeîÅ;(ÓÐ -þûadˆ‚ ªùÌIc-P „ñÅ”œ8›y—Ó…†0]–€Nkå=»> stream xÚÅYmoÛÈþž_¡`m¸ïd ½¦qzE]$£E‘ø-­-"©#©$¾þù›ÙYR¢¼:ˀр¹\Îî>ó>³â“þø$O'VJ–«l2_¿Jýls?¡Á/ï_ñ@7ÂÙå_®_½¾ÔzÂS–§9Ÿ\ßíou½˜|NÞ.‹MçšéLJ™ˆ7Ó™R:ù¹j»bµ*º²®èKQ-hðÞu]YÝÓ˧®h:_xžI‘äӛ뿿zw=àÑBœ)!·f“ʈ€ÜdŠq©¹`z:ÓF$áüd[Χá+³:i ßoË…C`‡’QñœqñŸi&“z; •&ó¢Âl;åI‹û;úR¡Áݶš£xZ¢»Š,y Om¹Þ¬h¾¬ðÃ7üWõrCŠnéʆªb¶þ^vKšƒÏá´Í¦©7MYtabS4@újÏa Р²æy‘ŒkbÅ5MÕiR¶ôl—5bø^…é𜭣Q}GÏuÙ¶€óõ÷¦öZÖû‡20\'ï~t®jKÏUX¾¨O–Ì·kç9îzÛÙüxa€>#Ôœ`ßÕÁ ]1Ÿ ›,é­—ôÙ%zI©@ö ^e»Y¤ „ˆI¸H€Â%k0ûÖ $X˜VJX–nµ‰0L+ÝSÍëõð X”J.½õ<ü(À Ü›ØY3!KmŽ&sI›Õó®øæÞˆ?Ñ0ú½%Ú2P÷øŒN~­æíú[q»ªchg™sÄøœÞ@+*dl*ãGUˆD^5HtDzÜdLHÙãûcTüõ’Ä%޳¤„ SE4µ0Ž_Ôó×=X¶YÜÅ皉t0Xt//UFX†`ÿ·ë«³ ¨`¶ŒBÊ-SZG-»õ* É2i[fˆÛœeVŽMõŠä ±¦öC.¾.‹!´:šY¸uM#´< >Ž| zçôÛ¶¸÷KîÀtYýÊ¿`°3B$×Þ«iûáæÛ.œæ§?6~Bì(ÈdjdŽÇ\'cvgQà9«º¥ø±=¥ùM‹ÛÖõñmÊ“èIJvXï…uj„‹‡1î½GØ:!Œ‘¾B;ÊöÌrŸ¥G§üµ‚Kˤ"µâ‹JÊÕjÛvϘø^Í ßC\né ³~^îoq,Cˆbœ:%JhFÆö”Lg”&îh cZ aÌÏ‚1›d©I®ê¦m9“ûꎟ› ýQŽíÝÖ?É\d´XÀnÊ"/hAç¼£s@MÜ$<ÊlÆøÎ¬ÞÖëw¤÷gâ ¥dR4øî볞&dùvSTóš.n‹Ûr™9ôdw´² ×yM9 ë+ë«´zÛÎÐo;Œžk*Ù¼ø¾‘ô®Šæ«¯É(„x¹x%-‹^^}Å€ü’rU•ƒÊóR߻ʕõé¢dSþˆÉDƒÄ Te6 çŒ ’s&ø….ˆ„瓜åF˜@2€4À„ úI‡J Rƒ Þñçà{j´}Ê´ôf",þ’¦i IÆT6„€@aäHéûQÿMlÉÒ— Ô!!¹G·‚€“~ò^ö2¹¢fãÑ^ù~ˆ;FQ–©!Ü 2‹Ær”ku2RÓèΤChø#¨T€}A¨ 3í…õÒB€ÔÚ,¾y2}Î^Ç`NQÀÓð4>’Ú;S2„¦Wñà¸<æÍ?Å{YA@Å O+EW|:½ ÇgzÌÀãAª)´`Àû0çôù tÔþX•²4?P(“ÃvX©W¦‡«Äî”a½¢ÑÍy¨@÷N u~Þ­ç_`ðG +±øà‚åÜôêìiûN…ÑÓðƒÐ(mñ ^t6¼)Å3 î3è{²ƒ>nȘ*7½ dL ½Š|”1‘žº1象„;tbô-$M†êvHš8·Kš¡fÆÉâ/wbNŸi°°!UÑ„„Z¾KH3­2ˆjÔã£rÜëSB~|¬Q_^QÒV¾hœ£aÏ |„Ž}Þ¸Îͺr¾Þ–M·œ-\)i°¬ñe‚k[(x•4!?ãGOM Ç…C,‚É W;÷šÈÔLÄÊÌ·ƒÐŸ`ÁÀ ˆ,š‘On`fGwAˆ¢ }ež“==Òï±3@Á8.‚ÿÏØ*ïf6)Úv»ö3y0Þ¨¾´÷žüÐvncéAKÆY–ŠÃÛÐn±Â›Ñý¾$D¬©sèæ8‰¿dŽzZ?Û,–úß Á²q+³¡Y’ÉgÕ‚¼¬äéEäÓõÙ {Ü`êbÑLP™Æf¿/«FéKžÇòð&—<äºð¸‰.ú0Z³€,|»@u„=†Šº‰›³aR÷“ö&ÔÀNÔ£ýq÷gÕÙ&=)Õëg§úÍAª×ZBÕ×'w‘Û½7®wáé©^Û¬/÷R=4ÊE…c Úð=áäZ‰n/_OÎ/Ú^âþà©ì(Œ¡|å/ÑÄÝæ¼‰ùA¸‚¶àkþj'£~ˆÐðù­„Ê9ªì™0ТìFŽø¯#·Ej÷+ʈì˜ÎÓÓYL_@Ô/Ñ/gÿ_Œ›þ7íߎdš‹ endstream endobj 410 0 obj << /Length 876 /Filter /FlateDecode >> stream xÚÝVKoÔ0¾÷W䘕X×c_T\@ $Ú¥ªTö¶¡ØGI²ÁŸg;馶Nt¥ÚãÌ|þ<{ ãôƒÌñÌHÉÚìb¹Ç»Õú* “£W{õ¦¤8ÝÒ|>ÛÛ?T*ÎwÍ>nCÍ.³³ød>{Ië˜5ŽPºÕÏ›rSV«+ÿmïålØ@ ñ@&^óg*z› €e6ÓH ûOÈPåÏÂpŒ‡g6L€áü cL'É@Ó]†4¹gÁòíÈ“:gïÃ×£0¼ Ãé|dúyuÑ,o‹\ñ·OÂÒqOh<ðþ¡ÆmÚÄ’·@0×åNwì.ÅBéyI«ƒêûÎ ç'SPÆKˆaŒE©Ã@.Éy8'o " ’ ”2áûw#Š‘¨ïöåV‹(³`œH±8ýíQ”öNKÁEfÛESeJMÈšrÊä—_‹åÍ¢$`csŒf£šPŽ)T}î¿X/o6mÔoÊúv"l^ÖAÞ´Õ¢úV´ÕzE±ÕÒåuÙ܇L¾^5Ѩ­–eüº,‹UX\y˜ÍÒÿ?'ý;ÈõÇ0Ö%U]Ó6^2y±ºìÜ4äFÎj¯ëõæêšhN¦ètáG¿W'Fe‡jî¤UÙz_&žsý),~©Úk?S»,c®ÊQ®jEåô†X"EKén*išp¬LKÓÛÀ÷C¿ñ‹Ãã-ZÍx<Ö\8KÑ4ã£û€TähʱÎÑM*427p=NQsL ÝkPÖ çèÚHž›3!‡ìxš<'ã²Wà)ŒP»Qã Ì¢}8ÆNöЀ¿§ó)ŸÎaâÓ.–Tqã8Ô†éjÃtµ!Ñt‰ín«¦j“‘%™QCޤ0­Üíÿ›`ãNn' ÜIsFEle>».c}dûp/¡°¥¦G‚߻ӊº®ný}R,ÈTb^þ–RæU“⦠3bü.Ô/êÜávèé¦M•ž gþÀã³þÎÞ÷W?äkJsÈYêùžjKWŒß¦Gô;ðè†'.ŠåùeqïµµÓö¬ßóÜG5>úáJ7>–Óß]bK²Ns¾»ñQ,`ÄÆ‡oÙw-’¡•‚·>8†àèúÞÉ2ÀD4N{?K±#ÿ‡#º¹ endstream endobj 414 0 obj << /Length 2955 /Filter /FlateDecode >> stream xÚÍ[[sÛ¸~ϯð£4¡ÄLÆ[o·³Mši¼3IòÀH´ÍD"½¤×ûë{^@’ìµÛLfL„€sùÎ=Kà=K“3Í9I…9[n^$¶·¾>sýýõã0p1ù×ËùYÊ3š4IéÙåÕ™¤”`³u¹:û0£tþéò/þvÙQ’Œ8%ŽÜ›S«3ª £Ràœ°*e¡\¸éø|!›½™/è,«çtöuÎé¬Â?ßæ ®åìâ&+Êåh Â…bH 6(á‰ô¤uÄ~*šeoóÅe±É‘7Y}pÈ LSB™gɯùÖR|8Š%0·€ÁvпÝq¦Hª¹±{% 4”(®Ý $FG¡Ò³Á¨×À ¥c)'ƨ€$ ©#_áC¹‡n¯]§Ÿ&ƒé@’,Ü@›MÁø ÓE8Í8Ñ&myøy¾`f" Ÿeø`³&GÕø}ªa[%4–ØÈÝ÷êÊ ¯³rUm\ûÛ\*Ц"û¼Î×µÊ?&T”ùʽVs˜èþÉk׳½ñó®¼ö¸·f›AVlÕS2…hš¤nÉÍm¶´:–Ä%Á%IÝnðuŒ‚ѱ€M0XŠžÆ©Ìæi÷;Æ!åìòÆ/·Éßåå2M¨5‘ì4ÍV‡5Û©¡zˆb«ÃŠímEýyͦÁ|GT[=Bµ§-‹Æq=óCÍI Ìë‡6Ûj.AÉo²f[€ªó”Înkìrýø'o¢Àe4IU7ç]±½q³ö:o[„E«Ò\€z ªt2¥‚ò¨›v}ì2>0àÇ YPÞ­ýF…þ/Ñ_Ĉ«”˜D’¿¸VšˆjK›N¤ðý¶ö:Y*,91$•Ù«£ÀÓó}C}šG·‹0H;%;‡M¤2®4à÷©ä§ƒ=üž@G"ô:6wJXÒÜMáÄìEŸm‹ÝNîU}Lgw B gw^ÀÕzmÝÒ]Q^ÃxÎ]ÔÂtë­l¨Í­s“õ»ï_E9ωB»æ)‘md÷.*LbxçŸ>&rÈ™àÇôLÇôlò‚¤¬³Ýht9°nª†šxÝ%’v¤þYþÊG-h¤°uF‡ ú["JéGâÀAQùsnÿ4»í â¢=MØO?&I²ÏvXÓ#›ÙáÇs2aoÁâá ~²¸DK’8Dš>ŽCâ ƒ’8¾†a „e,ƒiÈø¨—™ž¼çÆ!óT8$¿7b'áz"ϹýQ%bŒCŠ-ìœRÐ2k‚nßÑòÙç¬)–Ùz}ï^7yVvÒÅlÛ»ß6ôúœ}.Ö…ó íW7Žõãšûf›o\» ë ìÃ;6»Íjˆèvë¬ö?±ù¢ÑNëÃí1÷’0ìžCª»DìðûŒA fU¹†½Ý»—UrM;Â… n?Ðh0oö úÛ}Âî%Yã>Ø-@çÔ˜²ívñè"´¼­P™¢DXg_¥—¹ËLÓt–ÛļZï¶…ÝBjl–Ÿ2÷p‘é#èó¶•¼úä~kÿb뉷¦ÍÝ#ÆÆ4(¤b£Ð{OeûDäÿ¸}ÊÛØv8XPª„±¦/e-3ÏC¬Çè™çÖÕÎ4WùÂDZRNŽK"˺𕬶0 t€Ì½kcY”8šá‡M¶­ %Rh#øvÐè!¿Nò"“:kd(®Mb®ƒQS€Lš¥£ÅX¨I’ˆ ‹×_âÂà†Ðð©6òÉqùî&¯£-LN¿ûm´òˆ ‚’4Mj‰·e¾ŸXCŽSŒó‰”ŽvÊÿ%fç)ÑTG„u=¢øDÐL°jrÊŠû XŒ'Z‚õB0A4ÓA‚ü Vzµñ•ZhŒ½ö ¼¾¢×ÆçMµ©®ó2¯v¾¥î<¾ör¾Tô´·5Ä…s@ø¾2`ç4Vñ˜ªäQ¬’§h!{°m¸ûø Ô‹†î|Q”ƒ !/q[[ü9pBÈã ýÖ!`ã®.¶y›#L ñ¡}­±"‹(–BTÀÄÓaiY~j÷7‰€ÊŸdrºêSì„Ñ㈕>HWž±8{ඦK«cˆÕëÌŸƒ,*O{b9˸ªj×€4$Fâ&NŒ'Äü)‘Ú Ë«`ÍÉ„™¤úikò=ZòPCxBcA=&@Å”â{{LÕ.“á‡â?Å!i8‚1îDÛÙ ¨íŸÄØrìÕý(÷Ù+»‚°¯Î³ìÕ\‹¼yåÏ '*‘á~Û“„É{+ŸÂ=”Q!€AƒÓÖ “¼dçI»ÝÚmõÔöDË "…Œ|H3q<ÿ/¼úÄ—­ÀnHðmÜ:ÒÑ!pMH¢o«ÝÌ ~¢˜ÈA¤Ó²€Ù$…ä8­ø`)˜±k.M€WAýŽtöx57”È™3Øaeà'9˜^T€46ŸB%ȨæÅ;p)ãXaÀy[~ž>Û•ËÖžùìçbò ÄÄò)¼¤ÑyÔÖã³á pø½#€5KˆîóºŽÑãÔæ~ì'7öÜ=VÛÍryóÕóT% MÀÙ°ˆ øÐ(\ª@„k š€ÃiÀ^Üä6<ýê+-79 P»Ç4ðz|ÀQ¤SipæÈ]Q (»ûëb5½€¼õ$ôz07°O5·_®b‹EÌUâØbá ©é—ù2FV€¼¨èu" Ü[KÕWïô¬)þÈ] Û¸;ë|q¢vmi †×Î x*•ÿº¬Ö»MÙ8Gê(X"ÁzÕ±x¿¬ðÚè)ŽúÒG0´¬¶n‘™gE/xW®ÁÙ.«ò¶¼_ íT!*—T ­yB.*ecÝlò¶˜è½êy]½ôz[®bScÍêñ@Ž™ íÖÓϼ®g·ÖyƒÂ¾î)P‹‹ l³¼n«’ŒÝ &!g?]¾¹p­¢‰]Pè«^k{[#Ç?«Ý²ø¼Î£DHq{1Wn‚ÜßJºw¯¾\‰M—…A£¿&/už¹œ×Û Ã>±UVå™ìÞö3X輪«÷¡âSÉÀ¬ÅÖ“-\y¾Á²ÛZxÿß;ˆ&F(ðiïP4E=éè)Þõê¨w0šÈttífè(E}ˆ"8cfŽAƒñÑU2÷ªˆ&G¥597Q›ü66†Áï·uU^Ûb/|¿¨Ê2_nó•ûxQm\,\•þw‡<{†v‡ 0qêÒ=»ËÂfeE =Ÿ]×ÙíkZxæ¢Ø-bË—øñãè÷Aµ„œÓ˜£@æ6ãTdÁ”vQQàß¾ûíò}¯7ã ¥³ª0Ó,8-^~™R ð¯{ÌÖªLäxK–ŽùÖÆ½t·÷SJkF„˜qÓ!Þ✓`*£|”Bûº%‰:D6¼&únâÄ–3µŸùáv»s |É¢7!yÆÑc˜A¨A&a~’Ѓ) ¨¨t×s‚c“èE±0,ÛÓC©‰òºå3•þvyL ù×m v;1£ 2íÉÕìŨ#(ëõ©©u/wE““Øâ ØBÞhò°ÑœfG§YQÓ£ž÷•e{åØƒŸâÐ;?7ÚbßE zª;LVLо_Ä‘H÷!£wûkXeãg©ðR/W3˜ÛweµGYÌÛŒ1ãzÓ^lî'ªCÚÞ:ø>n/kÈì¬ÖÕé¡á=6m­ž½ ñmÙº/¬ûZÉäeG£Îßf]î“îjBœ¸ö.Øí£Ër5*'ÝC‹e'òP5©ND )GÅñvq~îhÒ)uUlÈÈÜgO;˜« ëm½s6„ÿ‹ã¿ÛÁÄü endstream endobj 423 0 obj << /Length 2839 /Filter /FlateDecode >> stream xÚÕZYoÜÈ~÷¯˜¼Qˆ¦Ó÷±†_Ä‹ ­Ëȃ×Ôˆ’éCáp¬õ¿OUw“lrš3£…7@ @$›Í>êøê«êa láèÂAœ´‹Õæõ­Íã"ÜüëÇW,ö[BÇeÒó¯·¯þòV©£ÄQÇ·éP·÷‹ãWŸnÿ±ÖkŒâ[ÿs¨U½}Äw¯þ~ÛO 8¿p%Øóh)F/˜ Ö—¢­$LÈ0© Œ°«¥Ò¼xß–muµF;¸ðbµ:<•ÛÕ·ÐöÔìîÊ»z]·uµÇ5Nw b`†h!ÂÈ?Ö_¯¸-ª-|.tQ†Ë}½_5U[-ÛzS…¦–ͯØs‡ÿ¾†¶Õ7Åç+V”uüþ¹n?‡»}\'Þ>•«*¬EËt-\)B­éDû[¯"RÉ®‹£ˆiÕõxC ¢Ž=øc,™6ÅxÑábºËëÐx“ÛŽ¹~7gwsâ1ųW@|µÝubó²Ì¬ÕrØŽîù… –›I͆>ŠæF’„KÞuÚæGQƒä`0BnyñÆ{ÆR2 ;Ö`Q` Š…^s3i‹ãKßaÃLœ9 LS”=U¥Ôn‘ô:µ7ñ½Ñ)ÃvÅh²-®@|´¯›Üb QÊ\º¯êìØsEû9:¡²#'tD¸^RÛJ„ÅÀÅñßá /e$¢Ì•âÅîηz´‰/¾V¾»kr+cše{(-Û°°}[=e¬ë[½Î=ÔÉ1Qº¿û6¶ÈJŒÝiwhÜY°’gì)'9TRÿÉlˆåöØÇFÖxìdun6Aû£Œ1¨¼Þcì¢M.–ÂY"¨CÉÌ"ÑÄ„€O¼Ýé?öMûo`B›pïG†—!"‰hÐ9uB€µ¬_[÷Jázë)ÚªÉ>n¬=)¸…ùº.mSn÷¡wÛ= Ûç°m.0K(wG±YrÜ.DÚ*Þ÷#à³8–6nʶ©‹Ë1csÒD zy—]2'ÔôÊ-·÷aP/t\˜°„rž#r`ŸF‰„˜äV¶ÍÁÔôDëaÓ†L@£ìѺ4üѼÀ¹£çã#Šéó‘ÊþÎHEçâ C:ø2ãà‚¬ì²p£³‹û”…QÐvýNœC¼2À‘Wå6xöê/&Y¬v›§C[݇>åþ‡|ÐàS eò…†óÝöL/ D)|\*ÛÄ’&¾ –$ÜĵGFb<Ù•DQyb KŽÆ„˜.'dtÎÛ{AÈaL±ªšÖÿ°ÛÞDV« œhªð®ú­Þ·{¼·`ä(•Ä9r©l:ÔJàí 'ÁW9N’“¶ƒ]1qNÜHš´ ð]pÅÔ®Öõ&#c¦ Ç˜÷E)¼ Ý`ß¼wû?cTè×úçÌ@‘¼Ê# %\M€èkû`RÓâùs½Bh‡Q åµôúèßÒ:H°Gz<4»MvGRé~ŸÇ«¥‘¶¸õQ æ8l ÕR\µF„ê§ ûR1PÂ÷»õ!FjhÞ=„Ö¶[ÁÃn½Œˆ;1/Ÿp?cÅÁCܺÞVeÀ/ðžy@ìT®¦8 ƒ#,Há ‹c·"-´D+{´U3'Ów3DGZ5ò›£é˜w¢‰P=ÌX«}y‚+qù:rqPu§Mèt›§þ‚„I·È XGOä­ äTÆ%={`ˬ ¹ƒœúâtÂÁÁQ‹•E4Z¿Æ¢@L¦|šŽ¿n«ýu xÛûðq¢[9Ö-hU›Aڔ嚟«œHƒãCpQî¤H¦»I·ž¥{Î<}·m»èùM » \˜)¼@hµuÑt?¾½²¢8lWÁ‘ðÓ·õºú·ÌѨœÀÅÀ% ÍÃ~bn‰|gèìV)‘¤}àçÅ}»YÅéóÀÓÑ‹z4ï(z—˜£1ÇbK;Äô ü¿îÏÐc´ÿëÜÆ{ä$º¡/ã‰æ64Þýœ&–†ˆNÊ[ „°ÛšbØ VA‘°H æÝ„×!KØf|LÃ/b–„½<]y2Óq|5®âú Ƞüó¸D‹ŽCãBÃ:ëµ²á8é?°èøþƒ‡Ò-£¾ÌX±‡˜³®Â=DV<6‘BŒFbª#àáËàëømBáðEWV‚WÓä_gªÖ¨ÓŸ ‚´Ì˜tZZ1<õ.ÊùÁÅ rl$"BÈun2>*]6×ͬ;3ˆé½[-ræµÈé´ÐŽoÅTv …vO¶ñ1TÙ±ó/Ðlë6~Ú§àôDÍÝyß·äþ‡•Ëá–J™Ö ¢2dt“²Á\¹œKà ýÙ• x¤Ì—ò"-§ã% Béã*9—c܈fJb©<É« gãIý˜£é=–ƒß5UnËÝ4¸¨g L§>Ê;å :yÆM}± D«#¥ËøÈw•=ï» 1(úE¾ë#ÝœŸ*‘ЩÙaí¥nJ]鈴Æ» ÒRn¨1B£§nÐækŒð<_c„Záj¦Æ¨‡ªrRc›`ÕüL!Û6äÐÕÓ¾Ã>ty1`ßczî'`'±’‡a"&™’À„¯rÇ‹£u2£Òö.ü•ÅP ©ÛI´n á"ðÂÚ®s“I¬J™—ÎuòÀ ƒ‡ ¥Ï=FeØŸnÞ}¸}Ÿ3@Š…[È¹ÄØqO[v}ýeÎaYÖˆ~H)ŽH4ù ÙßÍ› vI®”µ@KÔpÔîÎ (9€oÒ_ò„139¬˜˜ #rØé\ýÙgôÖþ ‹» YCx(·Ùšõ!â$ìƒ;{ö!€S{÷Á5 É S¬›¦º?¬ê»uOŠ"~¶oëUx"C$T›ªÜ†lÞD òwÝ(‡M$RáZ•]YŸ†,OÔR²Èº(ïa` öãjÄ5!© uóeEÖΗ`GÜtsâœYLZå¤×ó›| Æ„‰¥~ª®I©Ÿn½þ2cZXL:vyubj&èåö×>Ï5UiñãÝL­h@ûD=I];çs §mÐaþ3= äctÚä CТ̞% ‚R?ÛÁ/3ÐW¶ÇHO²Â‹ÀümRïÃÇHNý×1Àt4Û&èæÇjbà/ËLŠ“þÑp÷«r]6ùS`G˜FÏ1à1p‚\Íh/)]¥‡9cI3i@aj,é>>é)ªQ|ªçƒԄ ¦3‡£á*Âế£ßãÔ .>5Å%EÖ@0b!k]mgã’œòÍ|*·™.,„r9Ô?¸½0¤_FVëËúO¸mŽ•ápü­Š‡¡¢Ãuѵ‚¯½aÃ}üAÜ•¡SŸ•cSÂõó™¬à„éRïÙÝpJ†Ít‹ æ„ k«òþÛ2I!¸²Iš6cµ’vQNÒ˜œ`SgœØè+êÐæÓ_ÊOpù"s'S¤†äRKç֦⨘+j3-sï¶ã¥t*¶.ñ„}:ÝLr¦˜›qm§¹YFah÷æ;ê BRª0\„1Þ©"¼EUŒúuªÀûnT…7‹Ô‚NÿºB=€òlæÆ% ñvc©Îd@zÈ3“Ð#ú(çI€ð|«uZ 8äêRÅ$¿<é0;aéo+üAO÷cJÔY’ÊÒúK,?–°–\x:Ỿ¯âÔåz¿Ëþ:IŽr¾U»Y‘îç±ÿâ½oÆ endstream endobj 427 0 obj << /Length 1514 /Filter /FlateDecode >> stream xÚÕYßoÛ6~Ï_áGµYñ7Ù`ÀÚ¢-0´@°åa€›ÕVbm±¤ÉòÚýãÇãQŠ¥ÊµãÆCÛ¦H~<~w<,ÅîŽl<Òœ+Ìh¾:‹}ku3Âßߜр›:àt ùâòìék)G4&6¶tty½-êr1šE/—IY§ÕxÊ9ø³ñT½Kª¿ÇÌDüü‹}˜åëñ”)ÃmDùøêò·³W—íÜ’±Iòk–ºÇRA(ÈòÕŸÏß]¼}sö¢ÂÉ£)•DH†ðËeêá:º.no½³ü›ÒOɪ¼ ýÙ:àªbÕWˆIC¤Ò#¥ Q†íQªAO·àæï õtgoª?r«¯&ŽŒâQ™ÜzÚöIq¡H¬Ô¤ôR}¡žOµ”ÑÛ´F.›`ªy‘¯³x Ô,VÉç@ùcV/ñ+Ïòèƒm Ê •(¾*œ+9[­'è_ÉJ­—¸`96g¡¬aI¡¿·¤Ð÷>¦âfS¥Á=TÇà†˜àg~2…_O3îðûžÎä@¹¥-˜Æ2Žh±PòоkÐá3<™:QRËh:øõX ˆ’¡T߯ÀÃùÓïP@ ¥Tà¨ôšþV‚1Fªn8zîÜ4VѪجSü„¸Ãc•·É<]„¶Ë" âAèú®á~Ï`=Ɉ˜'aìGØ®Ùt@TÅ&_ØÒÑp5v¤ÉjK¬­ë´„mHéýdÈÖïß6ÄnÙcÎ÷ãÐ(‰Hý &šoªjL•7 Õ&à „'XÍÓìf 航p·»´hB ŒIÿÙ$·ØXVŇäCv›Õ0ønl8D2aTô¾‹ aá¥%²ë¡%w"¦ÌJ¿XÌ ¿@Pß"U BbÖÂýbL¤[Aè== [ýrB]`úAO_)œýOñN¸³‚&œ*^…_†|™‚^›!ƒ|-a–7ô 'C€7)‹Ö›Õ*©²Ï>lšàd¦I܇K¦ÍÚ(¢M7ïèç+KI *ûô,pêä¢Úy†…ŒU7 ³(=cÇDÙs!jRV1å”HGDZBiX¸<šÈ&Ý}Ñ4J·äf MˆûÙÆ:Ï×Á0¿𨠲#ãìÇlc?·óâxÇ®Ö.6±à ì›B…%ðuŒP³ôNkÑÌtO¢AIX§Ðí1…1ý–¡¨KK¤]KÊúDvOBc>\Ýݳ„ä XóN{d8¡r§öºŽ¥Ê9CˆSh#N±‡NÌím]¸Vâ+{ïw#‰;÷‡ 3º0aÜç`Û»øAJ 5ÿKìRÇÌrG<„Éñ«ùÃo±ßVØŒ£õ9yN‘î|ÿrÜ÷ÔåÁšÚ­³¬Ÿ¿H_$“{q?ÛØ­øùàû甸”ÞvÝ%pû½›+­ë.›Iw]e|=táÍl>ß”I>¿Ã¶²sõ#ðÒ¥üûMøº¿~)xþ]•›Ú_¾”inÛªyîQí“»Æ;ÖÎ÷£9òY¤Ï†^mÁQ˜î¾¢]Œ§’Iç¾øœVÅú},c;±® çC/8 “Ã1âÊÍIo€Ž4ú”íÀ&³€–Xð«ðª8 ‡Ÿ¼4z1¼å¡Žã!ú<ôá<¶åÈ{ƒ>X˜«9b§>j2ã:ö8:z2 £ìb&3ýDìd¦LÇ—Т^ÍAàÅNÇ\d륟 üÏ„Fs endstream endobj 432 0 obj << /Length 2918 /Filter /FlateDecode >> stream xÚÕ[ëo¹ÿž¿BW¨ÅòýH Mq9¤¸3z©QÈåÃZ^ÇÛÊ’»»Š/÷×ß É}Škù•Ü5¢—g~ó$Ãþ²…£ #qÒ.Ö×/¨­>-ÂÃûï_°8oWƒ™oÎ^üù­R F‰£Ž-Î.‡¤Î.2&—Ïþ¾ÖkPñ£ÿÛû¢Ü~Âw/¾;ëPœß“œyÀŠ–CV˜dÄY¶ÐV¡]Xùgª® |ëÑd‹%\¨0•jüY®˜2 ¾2®(¥Ý×ô[Ü-H‰ Â::LÃóx:lÂçßÿ‚Päø_iK,ðÏaÈ„éðK—+¥yö¦¬š«ÕE‘7WË•€enª<ðl]ÔuÇHBs"¨zœ×ÿðviE¶ß®›r·…Ÿ ‘½-7ÅÇ@@ó+Å=?-…¨ñôBï'1N”ꦼ^¹Ê.šëõùE¤I‡L)E@ŽítÐ$M­, —¼t—uÚpÓ‘9IÑ0Àz7#É Ò0VXJŠ+-)ñ}Ñì«m½\I*³æªˆU¾­Ë Wüú9ÏÏËMÙ,¹Í¾„Á뼩Ê_"7b¸§ A6öˆ¶ã¶r¹«Ñ<|\”õº*šÈÎù/‘Ÿå 8ñx•í±ÏøOQy°®8³G9ÞnÝä¨Ëê›|Œf,µ Œë<Ä+°m²—ø¡Ã‡i?^…ÁÓ$p%a®S Y®´á™Çmذˊ|½ä&»J± 4a²d™ZÀfˆEá$wŠ=|;c& ,'zœQšT-#Rw˜gHæ RÌÔ.F>Pǘ¦å°9#ZvSË:H6 Ô‹h^² †Y †Gkx3ÅuŽv„‚T‡Nó²Ú]ƒ‹‘:"(¥,pM½ª“Ê2D‰Î*šÝ‚’!åG®ãO`‚¡¼®ËòíEJðR DÆÎäÑ‚‡G冂ÇyÁ iFn_¸¼‡h™µD‘mR‘Ÿ]P¬0‚pmR!åÄôP É51ÊöÆ¡DZk€YŒò?<%€~؈pònGÉÀD D\à4QÐÜeñ3er[\„·yý2Pqšëàþ-A¼‹ìNß´ƒŠ8cï9fþÀ¿)8üØ_’2¦°yµ01l{–ò¸ç‡>pYÿØÏâ*Ì’Tg„ ð£8/7‘42IÀ· &õÆxà/œÑ\rL ¡¢*>ÅdGQ§(*)ê;6Á-‡Á¬»åËî#ßÁ¤q6^OC¢*Æœ=M¥r´&ŸQ)TciÆZà}4ˆóÂ<ÀøcàÛmð™-iÂøÖÏÁ8{š9Z¿Åß‘ñ Ò¥ÞfÂïä(¢=K3‘¯áîç~dîøþô1ÀÌ$Z£<{s,P’¶v@ošFÿ-‘’3àßÒè¿&ƒ‘°Põ@%œo\ø™·Xª¤Ô/ÜRßÃìÆŽn¦úsJm½¯~§‘—3þ`ç:»æÈ1桱±qk²m,ÎÚ¶'<öõpYÔ'á'UQß@õj²bÝ”Ÿ±5Tl¾,­lƒâ¸~ĤNSæqgX¬éþYD>òM½{™D:„zÙÙË[œ¾ŸvA’Í\#‰–ö ›+B7÷;ì«üLCÅ Lû"Ô¨ìt½„‘ó0^…ÁÝeøüWY—M²ÕlH·6ô}šz[àÏé,O [ݹ®d+~ÛÕÙ± ˆÛFãª)¯ãÐyõ_\s‡ÂÿÆÖ8p•—‘ÛUˆOÃ~¿ž-õ9ÔTR©õÑ¥t‘ÈCÆï:‡å¦øzœS9·èئ³hÛC“;è8`gÑ“ÐØ }¶Ån½n@¥Zd›¢I*²¶¾Ñ÷CÂÜ@,\<üL³E€ËŸDŸdÍäóÒ±¦–«¤uËý΃݅/Á†ûžˆqÜoÄ8¼óúœÃ¿Á€<Îá…Ç9üæsÀy ´ có'îˆ<ÖA4¬ÓðžÂC+O´cAUT…TNØ;%ƒÚ-Ѓ»n»[Æ@[hgWÑßwµnvUÊ”ä$*F%NTž®_n,öǹ1Ù‡¹’ŒÙ sr‚Ry¼Ï‘J:Ÿm3døÚú)„@¬}[ô ·=h_+ý•öö1 (ô7 Ídð¥9ª•£ö÷ÃÕ¡L¹?jƒ<¸=éݦ:²jöqéûï-¨ì}Œ¹‹9‡!@9¸ é¯Ó 7÷ç$Þ¿w´`é­jö oßC`ì^ÿ£ƒC3ÉEZþÓ€y‚ì1”-HÒAHa˜*ݱl›ãqrÏà7V»t¢UûÄñ "­}(_w W¸cÒUÀ¢SöÎsU_w §á±b›È.Žû±x½ÞßäÛõ—ðúðÌ&æ—M:wc»³òÈY¯¥*›OP¼j®ä±€]ª'à^m ¼ð©>ü¦Kõal¶[nÂW/Ò›öæAêØ:Âérc‚¦é²3“$,rÑžr;À†œžrïNìn—±Ä}©à¿TE^ð>MAëOÏñÇ_Úù·:(ã Ö|r#ŽŸkw>g&ÓlÀç­°WdøÝ•3»w7am»PÕ2 hû–*O-ë@pxŸmì§%6eiöÞ˘ŦÔàR¼Tgï se—Ä»xüÖ.œ>Íd¼µEoK רJ¶-Bíež€œ¥ MÚyÙ¾jè4 dón!oHÑlã;ßÁR¦gb“§9`ÊÑgUŠqßnN²Ð9¢°ê\: .ÑkÍœíðþrHŠ  Ñê;9¶ÄLðu@bpæ4½éQ¦Ø1$–¾‚ŽA–îØØxç{Jù™>i8kæô'ȯCÞËr4ÀuôÍšw©¶S‰`’}#ã§™{k–·£¦~H4…—ê“û€F£B2çú`Ç!XC@BÏu€uø±mØÙÃër¿½È¯‹mƒqü á7V6ðÏtŸ¤î’¾çpšÈErZ;ѯþ3s›’ÛÑ)d»Co¬¸½ÓLÓp(ÓðGÓü}S¯Î…›q¯ßNBKônr)ShR xƒmSüñbkÚˆéð¶Urа^œ+ŸíÞQ™à¨\—CÀŠy]ﯣ >ú UìáÑÀœr½ú§!¨²¨=Zï¸{s†6ÏELÛ•ájLª­ !Ï®ò˜$»jPü‰£€‹áµC¤puùk|Ú%I͇d6øŠ¡5S O›™¹“78¼ü!íÇG>5 =ôg.kOÓupšFÚÿÊð‚rzU endstream endobj 437 0 obj << /Length 2368 /Filter /FlateDecode >> stream xÚåZ[oÛ8~ï¯ð£ ÄÞIµè;E2h1ÉMû03Š-'êúHrÛì¯ßsHêjÚN6ÁbAˆ&)^Îå;ß9*›PøÇ&)!H*íd¾~C]oy7ñ/¿¼aaÞ &Îz3¾yóÓ…RFIJS6¹Yö—ºYL~O>Ügu^NgBˆD¼Î¤TÉeVþkÊm²Å?ßüL,6ÕtƵiÂÔôÏ›OoÎoÚ½çO<$ÎaŒ¤Jq\`&´_úwõ“”îObœ(ÕNy?…“©dQ¯çù‡*¬JûÇÒ–pf›þ ŠÆö–„ËvÕÏaã´?Cnt3ã,¶†Ã·36‡Ö0O_ãÆ.ä$À{ba«6¸0DP„©¿¸2ŽRœäÌ‚dÉ‚n×»:Z“Ô÷®¡¸5øšMòy/üؽq·Æ¿·~¬ôÛ¥ç[QuÚúgžÍñ…{?YRguØd±+‹ÍÝhç?(“eUw¢êÎ/DJ¤Ø³ËÁ¡ÉMÚL©Ël‡©œhÁdJ XÑ@Û@;wǺXáO™d·å¶zÀ·IØÊô·°cšÀ{~‘WŸ»¹î8œ'gvhº?GÃMßšŠ³¯µÌeÄšVÛWaŠˆ¦¤¬[òØBДœÉS€É˜}y‚„KÖY]?HìÒ6%,[þ3®<<†à„òv¹¢òÛ{£ÁÆè\åö6»-VE }ôËr»ö­ÊÙ`D  PN4xÛÀ<ŠØ‰À+SÙÊeë èàÂ’ª[}|-¨c­8¢"1øÁ@óhNwØ ”k´û]Ý– åÜ– pÊ:¨|rÊôIüùý¾h¼:iã›#pÀ±(8ôwiÀû²2÷s= çštð 1•`hú)¡}Ëç*jÖŒ(Ø*Ì¢hvÈÓÉÇeLôÜ®ögÏœÛxðžØU*Ù=°”y½+7Uô²œªÆÐì&G/Á Ž¿˜•nåoަ㻪¾”G7™q™‚µ€%å¾=6èŠ 8ƒg0ÚL+¢øÐ)³eËóÙ¼^=Æ$¨EÿFQWI‰N#WpAA‰O¸`«½§m5¸Cð&5a²UÍÇ œ ƒ $êzHqÍ­Ô|¾{È6óGß×!]‘Wï¢Z·‚p.÷¬H¶Ì£gåÀL ïC1žÃÃð@zýhVwóœN9ÄN­>_=­½NÄC .6'ÕjØôT·zÀƒøó¿F÷X¬ÌCìNýÛÿøíæT”O÷XæŒ8*åaŒÿç}ŽrP*™g«•cdÐþ^ÔH¬@3Êú»Ï™ÜPVÞíÖðfUEÍ}ʦR|,B1 ªÌ >Ã)||V 4-T"¾äè$<su¯³s¥<så',£‡áË-†'\9»­¶eà3il£jÕí ‰÷-óæÝFö8`“±òµMÑ'Hží ÈR´"§×ŠÃÍ!ɇ.g1{Z§x¶$ç$ëa?›žYœtÎ6#€UÛcÉŒ/I_ï#§B¬§CWþr~qþåüêÃùuŒoX’J=LàÄ&5\vá¸+ P¶8CVJ±ÄQ®r”-UÉ%y‡½2¹Þä«U˜ñ‰øÁ_3SîÛhŸv+ä¸T&,M'3iq gµ¼ 3Î:KV»&—†Efa¹Ï#0Þ)±ƒ äh,äìýp^DmÂØ[X=¥{uˆR¡Îfþ}—Å<Ûø¡Ë L2 ¥Fb|ÄÞë­C–y‘×h»S+“ðúÇ럯ü¤Ôص¯S#SW=gŽ2ãS²à*×y°ÁlUmßF#7X l-p aHìA溌$ZZØAFCU äCät¦4OnŠuŽ7›eSÁAøS™Ý9×4uc_ðVèªàîZ$_·@»|O kTÑ*Ô@€wK_¡Šrù¬*Jª£XJŒaÿ?E­ÿQ-†s`ÐlT‹ù ëãEu­TB[ªk!žùdÄ¿k ‚"R´ˆî3˾AÐS€0w9>\ddàk›Áž›X•0}Òù²  ëð:EŽqã0®–Uª}¸„Že™µH.}ÜÆa.8^… ïÑ?q°F“ê^;æÍð+‘BN¬Nw î¼9-4Á}¸>wu"¸C“vªÝ›Åuµ=h÷k{àÙ-X„«G–8–‡j@!s R­vëpÚ`>.qàª;z+'œ,pœ®¡;ÒµZêÀ¦¼†\ÆíÊ<Å™eÀ4äóªÑHµuåàgU1Ó%=ûŠULdýö ULŒ°'ª˜ª+W ª…¥4ÕBP‡+m‚Ú}uáŽkCÞÏÔÕ„´Þã°2°Fi;û‡Á^i ‡¼MáK€<Â|©‰ÿ0gÌÖ¡ËÛ/ º  _Gc¤UA¹»µu·À¯ã¥6FY_°¯^lƒ,©XFy*~ïÑ'X}oß÷ÈmBÏü}ŽÔ4s–þ|×U¸…´B<¹$_Rê2,§»@w{¨"[s ÀÂø<Ö…‡_#ž^Ñxa0úûG—ð»+@kÙñøå{uÒp}–¬9^øîs»|Î Í'äÜÀ~åkEgH¹;nÒÜ"„a³ç®xCˆÌ³pñ3'æîö’s‡!øôµùˆßma]|ÿžÐ3<Eà>Ut“i“¼Å‡öÓ<ÞùÎ(à‹-FÜ Ò]`D?Ü5‹MsÝTÀOž(ò bT/ uðÒEq\=!]+ïoèEÞDëYWrbzøÕ9¸·fȱ WçÖ†@Ž=ÿÎ}rmÆrƒlÛ<t¿ÂÏSç?Ü6þƒ[tþƒýE8TS¨ÂÞiÜ[½z¡¿­“ŽÌi8aŒŸô'ûÔ¢²zPXnx-6º¢ûŠì¿.8@TôX¯ ¬ŸáÛ–k†·}MÔ¿Tlši쎃uÛ®H5< fÒúYÇ2=i@¼1£,¯_V<ŒÑÿE¢ó¢_†Àÿ%ólݯr endstream endobj 444 0 obj << /Length 2814 /Filter /FlateDecode >> stream xÚåZKs7¾ûWðHV™X¼ëò!vì­l­µ®„©=8:Œ¨‘L—D*ä0Žÿýv 0ÂRÖ·-U L³4ºûën ›Qøc3GgF⤭ï_P?º¿…ÎÏÿxÁ"Ý—å›Õ‹¿½WjÆ(qÔ±Ùê&gµºž}š3½¸\ýs&¬#Ö8àâG?¶Çv³½Åw/Þ­ÒŠó'®)-Åè„ÂZâR´•„ &„µX*ÍçK6o›íb)Œœ¯6÷-öÔ¼Û…ö‡«ÃnÿÐmv[\áx fˆ"ð]}n#•Í©8Líl¿c˜A±9Ψ¨™w~FE­ŸGš“32nˆªg¶9,–ÒéùuûerÛ^‡Ç&w° 0°àvþþk÷ÍmÜâóñÿ_-–þ]x±»‰?ß7Û×’ø5]d¸÷[…ý+F@úЩ*–µo?nö¸áX%´­Ÿ°ÃYðÑ [Üðê€à1n Ób'Ì“± Ý]œøv$çßla‹Í]NŽ;£å–v^Bëõñ¡Ù®¿±ó‡ýÚÜÁïÛC8--ŠÓbŠX™”ý7*XíP5Ñ4#R”Â?F¢€)œ8“ÐÑD0ˆþÕvÕù,š÷œ" í'΋h&À tVG ª-HcfQTøÏUP*ÎeõŸð`æíºÃãÆ÷I­Œÿñj…/P­<ƒ\­p ²¿Ùí#ç8àO ‚Š„Á8ËfHáøaŠoñaP%¤‰ªäÅ(Á0]ži¦^ÖÌo‚nA/)ÁX¾N‚ “%WE'ˆQ‰‚,–Ôý0î-pÝ&†ŸšB 4¡TŒN¯än ×IS^Sm矪š ˆâzÄK–Š \¡ ¬ÆGYhÂ+8smæÇF‡ÆôÍ«0XS;n ³¼˜î¢¶?Pu¥óù.ɬ½³°¶×¨ð°ÞÝ?½Þ•ç×yÃÐq{ÝÜG¿&î5 N´eQ¢SnºýæÏÚ¡E¤Mþö¢î“ýæ2û=´íИrDI=SöøwÔzêeF^ÁØ1S¿€_@Á=¼‹B¨Ø•óOïÑ\mo®8\Eü)š+¶lÀX7÷ãêÃ[ôO—/£ô€‚=&Ç»–Ò;œ§m:ŸÙóˆe/s–Ðj‡ò”DH˜ƒ;bä 3„[3X…ƒØ%…`UXrðÄ’â|‚(ïŸÛ}[Õ1`)–uÃÏ´ð5~Õb9íÉNÛjeT¸Lˆ]FÒŽî&¨Ü §@’Üß› k¡Fç> ‰)f!d+™nÜ¡QÁ«˜è“_}©M ; Íè.1À°áCšè |?;²ÑÚ(œeßeqà‡Œ+VçÃ:˜>ÄoÐ" ´ÓoaЇiTõ>Ñ>7W}D8Ãænâ7‘hã8sDªt@_êñcÉJz€ïÌ$ÀRˆßp5ÞGSƒ€6…j”M/‰ ²åYÜuîJðV?Ü6nÑQA„}<Ä¥ÐpÆëöP7pA¬§]>#–'{l¶×Æ`U"úy‚Òö tH ¢èå™$–ês^4R/3òš1AG ®Oï Üðç-xœ'?ð3`"30'ÁDVÀ„ÚáêÁݜ–CO½ÌÈ+r3áÉ×E 7 ‚Üoºª#‡ä,¡Œp§œ %ÆÚgàÌE]}¤ðúSÀ̧÷ +æÇm¼ßܵ—‘FÎN)î Ò"† ³÷Ã<'ÒàȲP2nVá›75¦gbˆ‡.åëÐ\w÷ëû®kâ<´À8Š)â¨Új£ÑÇ\¯ÉØT• A„’¥úþŠœæh½¥có §iG´¶@x$>sKþ‘Òb¼ !=úoáOÒy[†­ø®še"­GE 8tíÃ! ù%¾Ëj,žàKþEh~\!z~ìx¾nºÏ=Ûq BÝC³îÁKŠæüî¢4nêp*Õ8ü+)äS⺋‰%™¼Ím=@ÂN†g^ù‡L}\ðˆa:ê"wr…"€…p#Æ7 ¸å¤¤¼si}Í ¹ì¹åeÏÁUÙ“š˜”dP'Å`&Å0Н1ÌåuGœ¬Â×Ü|¿X0(‹/×kù7Ö&´*¬'æî b“A â9nêº$\¢ðUÇS %¸Ÿg„¹U!/Qŵ5Aç¨-Ýb)mВ̈½¸§„-5a2­í§T LÛñ†·ó~//I‰È>T%SÚžÕžŠˆì®ÝÞÂ1Ö2eòbÖEÝo¸bO¬n‚+H yišÿþuõD#îjÙîi*=%ãÒ®ÿóÙ—ƒ¥‚(ïîÎ×F Ü>öšÐ`qׯ¡ýíÑז̼{YuÆnðs=YTó³É‰!ÅS“¡†Šíô©9Gø`¨SŽ&³åÃqÅúMÓ! 6™í÷9H!äP.ðÛ·¶/ß¹1ìã»z‚´^0@a¿¯&ØÏbÅ× ee3üO‘´ÙöçéÀœ–Ñ{0ÍÒy¥š³|¸¾Pùõ¾ >.ÑT]­!õ4OOt!Lý¦ÊÍù÷3‹åÝü. V—Šè/kz+äÔŽuú)çï½Îëàthug »Yo òò†NŠõ§QÄÞ[«4²Ò çáÆ§n»0l´ëP7V!”'Ìyˆk½¸L¨As€•4{8xÅh ptß>ìÛC?q\œj¡Ó>Nª„:Ú=%©–¡‡K¡.e£P—²,ÔE¥d6WJ_“ñJ‰™Ïñé>L¦šL˜­¿[VÂßê­Xý±°­!úqñ¸4ÂÔôUt•è{ñ\Ÿ4bH‹¸ø_£§Øp;€ öƒúb¯ M6~(Sà °QÄryî¢ô®ŒáÂ}^ ý-1Tž‹{ÅpÉt"ðUêlà«ÉøÒÆ/rH2°²ñ¶´åݤ;µQ Bäp÷þä ¤T C,{ºÿõH àÅ)oU±3=6q£*X¸¨G‚TUcñ˦XYQó-¥ÄÁù™!ÿûRœ_îf‚sFAWžIé{¤EœZÊþ ;‡oà»îc“÷åñzWò|w!ù©]@Š Õ¹21,‡NÃõl˜´÷|ù4¨p ¹ôC‰žÎ×»cü¬á: Ô±XC2¦Îe/ÎK‚#@ç fò9)ËRKÝ_l–´/iç- ¢¥õh ¯ž€–Ææß´LF™¼üRy‡&ÏFðywEmÁS²‘ûv…$ ^†$z(~ Á®t2ØU"'õ<‹ÿr"ȵ¥½‡©ÛÐyTÛ¢s¯íà›ìÃËPߢɿ=³]l ›× Wâѽ̄ é|[~@ å¬2ÄÆû×Üäq ÿØFÈìc›<—g>¯™ $ˆÖiÁéìe_œÕ# á(á\–‘Ä›ïI<‹ãó H¬‡¬•‰Þ²YøH RÖŠCç‰ðÆÉ;\FŒAÎVOBôù0Âqq.Œ€®TâœÇ:‘ô÷¸¸´üwœÎ(3¾cþëÇãqÐéQ’òÈæ“fC^ÙÅï—’msW$ª8>úþ ‡üÅfèN_å‚ëÑÎ<ç*òVYä­4å­´üØ.ó2xI÷_Ë' endstream endobj 449 0 obj << /Length 3091 /Filter /FlateDecode >> stream xÚµZÛr7}÷WðqX1Ü/vå!ñZ)»bG)å­xý0"GÒØ¼(áüýv˜«0$ò–ª47 htŸ>§A6£ðÇfŽÎŒÄI;[nžP·º›…“ß~~Âb»4\ôZþtýäû ¥fŒG›]ßö»º^ÍÞg/î󇺨æ !D&žÍRªìM^}šs›íðßçð –Ûý|Áµ.cfþáúõ“—×í·çg[ž%3šÈ™¶’0!Ã@÷u^øÑï/´è·å†hÅ¡k߬ M†Ý b”mZ<‡9jš•·©Î˜%δM?¦:sDw-J°ˆd6Ûîêp’ßìwÕM¹½{»çýw­&ÌšæåŸb÷ºßDÃÛÿ¥Š–O?Â…Uø2£©IC„–ÿ`šI›Y"˜Oóøì´"V»¯]ùhv,5žw–paf &S¡‡|»J „3b-û?™Y1¢»YÞî0vœÊòõ:eipsfõÈÒ°J½&ÎÚeÓ©OÒæéÉÅänsYEk'Kæ aýî¾Ø†‘/aèÅ*œ)ë{<“Y±ÿeÎ  €¿‘Ww‡ ¼wê}\å†Qkˆì®ÆƒÕ¼ïWÞxØt¶ÜE›%f¡ÍgH±¬ÑÐ’»lwŽëb{ƒMÄ ‰v…Þ&‡!¡I;Œ/÷EU¤Ip¢ºÕ;Ï‘‚%¾‰^©³¨ï‹pò0gYµ»ÉoÊuY£‘ÿÆû¶î @/Øb/Ü¡n®B“rÌÈ §”C3öðs¸j\÷gð1ŸM‹§!DîÊÏ8JïDpYn˺Ì×á"|ËŸîü—ËÃC¾]þÂê¡‚¹6S-‹}rTÔ.Û>$C‘1¢ ZÇMÌ6µ  ŒG¡CÓß^^¼üíåÛ/¯R à(š‘'š… /åΪÁϤȺÈWh#F1gVë}œBR%Ïñ®Ì®¶Åz[¼&áá/ù¡*‹pŽNôú°FcQCç zIZIÂXmk¥W[Œ•º F_–u¹Û†nê]èü²çc|,9'^oºõ±i 6G¡ùâ†/©Í{†L1Îed±å›¢*—ùMÀrM^—Ëù.Öá+œ‚É–ecÁÊ,öðêê§·¡¤°µœYj¤cé几Ó🈙0è«"ºf¾Þïž%)ä1ÙfÇe½Yn¼]ë<~ÃB¡½ÿ†0ö . &¼V"z¾PZd0ɲÚA`.`šû}~W„×å¦ ê/p›†]ßûhvÑtF¡30N×õ%ssÄК߄6ŒÎ4a} «.à›ðÉ&åó$ÀÜ%p¸~Ã}ø|ÝŒ1Çä®ÚÁyïÜ…cLAá]z„ZXsØ65P1tëÓÁCÂt± üe0:Þ?m®ª=$ãÕmµÛ„ö“ƒbÆ<=›­¢ÓK qUWå_)—’p#F ;NvÍã=ÄÙ'ãA©?Çj÷×$F\bô =s!Ržð%y–/q@gÑ÷¥p)ã<û.öî€w;͵7%‚Šz4ïü'1J¨Ud#v>Åfº×Lùˆ}É~7#î5øÐy¦G64™"† ‰ÊÈ8¿ËD?†P:6×§¤ÿà¬Lß\g†ò'0§ÌÒkO@hÁ‡€cCѦ×s+÷sÙr·y8´ôaà¦Ö‘­ ÿ#Êuf\k²÷ÉÙAÆ•âÛ€”#ÂüêC˜J+Lí )S ÅÀ÷HXç1sBËÀQ]vØ+äÎ’g¿@VJ˜‚âݲwI[À;åù[øÆbJA(B»›",DVõH(åé&±§h1ð¥¦É¦šÇd_}Ýç>Ë{üu–ùo܇«jDxôçÁ§v8E÷G„ï»q®Xþ³­ìrÂQ€[X§°¶ûþ­àák cÂÙÙßtƒµJZ8]Ï®žü;”€G˜ ˜E¸ ©‰´jŒÜ#ƽÂïÛ%é3 ‚VŸ¡o4Žoúãr¹«VÄ+d†â‡àÆ*KÜÉG‹nö4iW “<›Í´†-'‚Ë€ œKEøòðr†žW7e5–¼*}îí‹´¿c!ÌÉo4HH!BõŒÉº´€6*¯uü”+ldVá…¿³A|`_¥ÑPï/PA¶Mù¢\ºB;ƒeP<”i5ïó¯7]©½kÃVJôè“â*[Õ›åíCnt$MäýÚ|êÓHIøˆú!ܘÇÄf”\šjTtuóB؈m`ž®œ„·šú^Ô¾èOqokô^U‚d]>ní(¼Ú–ÐpuX–7ë è@º­Êý‚¼Xx¨ôkJ·f°éô\^n#ï!Έ­÷Jþû‡|Y¤( ‡0ÂTÞ(¬ôVUO=±tEEvwÐWf—ÃA‡ƒiÏÃͤÚÒ²b/w'G2Q\¶8J³U‰ÿ«·—¿__¥v“èpâò«ö%Ó;‘¶« tÀŽõX' «”…ÇÓ%J pÒmpNà¸ëê>A@ßÓ©Ðóäþ¤›Ú ŠêôëåùèåöPÆñ[YWf‰{‚7ÛlcdÁM7ÜcÞ×± baïw*¤QÄBžV‚g_î˦øáŸAÌîÃiÈàálî) žï!Gû¿¿Ç®x‚WmñD:žùйŸ ^µ“ÁvlÛlŒtƒ²i:Èh @_N°=†ª à\ôT>~VÝÙÁ2ö5°—šÙ„ÂÁR+ð Å—BG¾zŽ“i(c¸Dè1t€S$Ÿbýà6¹‡MU£.'ȸ¶)WƒþãÆÆDôdöÛ´wêÄ~&¬øI~ýýúLÌyóm1ÇgxO}5•8a)Ä•’Õ«/q9á#´cxe„÷´À5–Õ×uxÚèI%>ÙÕY&~ÃÑUÿÙO8¨0çcdòç78J› Pÿl¡ýOÔà‡ºQŸØýŠ T›^ƒh1¡Aà%¯A°—.U®ˆ?Z0ÈîF""¾ä&v=ù+HZŒ»£4Dwž&$²X,*/´ˆJN7¡EoóOw›aç±Ñ/ºÕ/ÇÆˆüG){BÒΓHò7dÄJýµË\NÒVÁ{µ¤¼°å1-Û¡ÝoÃ:Ù.Êv¸à=iŽÏ;i>†së·ób§ÞSÜ19M‰TÅ>®~oºþäñîµëFŽ€*ˆu£MãVFc¶ÙÅdÓÈèöÞï`<ôöuÞ*ñ ÷> endstream endobj 453 0 obj << /Length 3228 /Filter /FlateDecode >> stream xÚÅ[[sÛ6~ϯÐ#5k¡ÄHÖ­7餳õ¦µ;Ó™$ŒLÛL%Ê%©¤é¯ßsð ´dÇm'3æ :Îå;7„ÎRøGg&iΉÙl¹~–Ú·õÍÌÝüüý3êÇ-`àb4ò»Ëgß¼’rFSbRCg—×cR—W³· Íæï/˜ñÌL bßþ¾-¶EYÝà·g//û $cG®Gî/E—BiF²™Ê¡\¸y~ùêåÏ/ÏÏ^^àÌß¼Rbüƒ ˆÉÙ‚*"3ÿƒw)Õnh¸Mʈ‚7~;ß×eÕ´E~u2_pš&g·y½*xHeò#yoErQ«•ñqÿ›oë²p÷ïR™þ°]}Á'‘Pc4¼¡ÄOoÆÓ3kÍx7ÿëjβ¤­7ó\¯¶Ë¶ÜTŽL»qÄßÔ›ù‡rU¶8ôK|O6®;¢'Vp ®3|]PN¨¤îÓÙ-,_¤YBés oÒäǼþ oðÏ'XÈ`‹ùíº¨Ëe^á'àÉœ&y{[¬ó¶\Îð°r¿¹À-èdY°N ëÌDâ)¼¾øîÜ 2:[¤£Yª…éÈ~Á(Qö¯Î¼&^ÈgÎa®fó<Æ!IÚä÷¿l×Ëë»Ö“×jFáB1K^ ¢`èY¢±?à„ÍRñä ˜ÏYÒ–p¡Év³m—åg×Òq ^opÈ'÷Îq*¶$°7je~ßÂxI“¦u’^"·oóÆ2?ÜyXMÓpš¦$“´ÛâµÃÇc$Rt#~- LÙô#Pkcda‚uƒÚ´Ýz ØUº#¶³3VnrLFUœ’Œ÷žÆÛ¿‰oŸeýˆ²qœÏÝe¹q¦XÚ‹}ëD‘èÞHìœËÊ=–×R&×›Ú^­ü'G¹¸)ê&Æ*&%I³“ªØÒÙ÷.`ÉŽçÕ•³· .àà û¶)À«e[M9ÑLïH^ÀÔFó¬—ûì“«P;’ 0oJL0³F>¦HBñ9^”»èîò½ô³Ñt4ð‹f,˜¯š0$ƧwÐÜßBµ¿OA ëåû/Up0FÇ“6[§bNŒímÞFy“¡ñû…æuPjšÈñäÿF4Ïbô¨³³ƒB‹Ü™bg²€½B€âËÃ"Ëì¢&7ÐŒìà‘2KÁí»åúé1çỢ‚á7èB,-•è“[Ƴ …ÒÉv©rŸE1nöK Ü&ÂÚgQøˆI^¯Šw)UqåóårS_aÙÉ>Ú$æÝê³ Ò Ç´Wù²²¤Ê¶hʵ­Vè4¹)ª¢žc’Öbž„¯Öy[—ÄKLZ¨0Óúi¢º$‡$ôë4y–$Ù ¬Ÿ¢™…b¡w+_|Œ+%ÏÏûÂPÁTòù¶¨ \ƒvé Þ¹Ï*bA´„ÛÞ Ëx¥ò¾ ¡â…ô>pd$“ýãÚGiXËÚO-”æOÂ:hÆ‚¼5ùÔÞzεu^5¥«Ëás·…«k]ƒ†×›µ{hZ|4ÈGìru× ½qÓLÒ°XÍr°Ç12_ª%—·…¯¤ŒÚ• ܘiÝç€Ciâ§©Ò í5ymË'Më²Ö&oËæÚ,Kñæ®ÞÜÙjWQ·£â¦¸'îw¾zÁm% uü^†r¢¥ÙÑ!ð¸†ÅÔõšè4L¸ÂD<Åb$DÜ ;·LÄb:1& d†8½ÀO鄈T̬“¥Çú~=r4€ìSç(R[ip9«žœ¤©ñöÕ<ãɶêjÎÀíWåªxïé+¬‘Ò•M¹b„§=Ó;HcãAà]t¯vuÑlW ’Is# $µêÁò½{ê.XÃ]Þþ晢ÒÀZR¢ yá`5AÜ¥ƒëÕûu̳`&þœ…àÿú:VÜ)pzÀXI × …bXƒÄ˧¹” ñå•{Üó\øÒz.çµðÑY.â½Àóv[WîƒÃ/Å“¦ü³p¯S®ºiôƒ7A÷qsí®µõΟ÷ãMí@ƒ)P×,äÁr³Ú®«Æ%\$a ÀŸf÷ò$C Aùó)›q.7åÍ0Ÿ+òš¤Ú ©Cûb·ørÄ[Ûó–~6EíçG°@j} ‘àveÛÜÿ,êŸ+·‘ \Hˆ´X€×ƒA…{×€Ä"˜!´ò…à»;ë°îêÒº0|„:¤m`³Õ ña $A^\”ër•רæbšº ¯¨hxóŸËÏÜÝ2oŠÔ.šoÎúoe‹Ù¨„›ÁIÖ68+ðÏÕvY~XQ?ÁÄi—×n†ÂÕÚj¿NçH»¹áʺ.ZÝ‚‹ñCë.8Êý„¨øŒÐL„šm½>2 )i7>n€=;{&—];óÞâbÇí[ÿNtv(ÛĨaó•O£rÙ”õ$*Ó¡ò›Ç£r¦‰4{ÍÍŠï7lœrÔ‡ˆ= FRuA¸ ÚR«ë«",D|®Õ‚Ÿ®¼*•6Ò7m½©n\C˜aW±*–mᇟmÖ.úÙTþw~ äÙÅÙ™T$ öZ¹Û¶ ߤ°ž~Œãõä¦Îïn½B^wݯuÎHmºlo;ýÜÅB$2ÂBx "Ä€¡œ¥.ʇ |,ÇâØÌ¢¾‡ï7öúüÍ/—ƒívWµQá¤*Œ‚5ËÆúXž|œÒ' 1¬uåwSÆÐ9à£cH´ÇO…!TeƒæAÍ-0Ñ|"­¼§vïC92š”ÅaûSíÐÙS}ÝÏÔü¾Í1}vëî]VŠ Éá¤Lô‘2'‘°®[sr ±§üuÞì€Ò T<žÓd"Eã’]4£ÐàŸä®kNÒÒÊ“å†=Ûh |r&Ærq¸úÍáÕ¸Lô˜>˜âãD™@d[êy¼´a†rÊpHi#¾þ÷Ëå‘Ð ¤¤&*¥CMÝJ§œ Iñî€CQÃ; Þq( õtD|.›‚Ä–¿È°Üc÷ µO›ãàï8ðkß €=ãþËšÜz7†_öܾ;^L¹´Þ}š4ÆÁ?`€zð2>wYÁJ?Ë3®˜Û¿Êë.ˆ§Ÿe;éK$­ ®ãMÐ ¬!÷'Z¢ƒ‘²ƒGt&º01 ™›‘,´T˜"ÙÕºLn¼ßÇ[›Xr=&>-»@äÄewð˪§QáOsßò ¦&Ààò„•YàvwÌäj¯ÊS\•Ë^â¡vRôXo7ƒ£ÞxÓ8=õ08¥±îŽøA8°#_ma®Æ{Ðm½-FçÀ ¾}M×h‰Êážê‚ŠGÁ„pΑh™ -–,—Û»¼Z~qïîúSye1yþ P¤;¿8Jž¸Pn}xµÌ‚›«²YBúîŸ|Å…Á£YÒ * õ÷6|‹™ƒ}±Qk•Ç9gÓÈØ; 6>»eÛÆØâ\ÞÆøÝúv:u4z.h¯S§wu?Ѷ³Cì8¢…:ì-ìþ@¼¬h°»ó8àI©ŽÝÞÅô~P¿XÅŒk(]&« X‚=ø†¶w¶}‚á*2¹†ÁÚÍâ7ìHk,DŒ&Ÿlf¿l7Qï ¹ú7è> stream xÚÕZYܸ~÷¯è¼©‹áMʆÃÄŽ'ÛFxý ÷¨ÇrúÚ–ÆÞù÷©"©ƒjö1cØÀH¢¨bëúªØlFá?›tf„ …´³åæ u£‡»™¿ùç_Ÿ°0/‡‰ùhæ_OþôZ©£¤ ›-VcR‹ÛÙÇìå—rßV‡y.„Èijy.¥ÊÞ–‡ÿ̹Ívøç›ëm3Ϲ¶¢ÈX1ÿ´øÛ“W‹~mÅù•LâÌ#.µsÉUAD1ÓÚeŒçôg*.:•H¤ÃEýœ˜ž$\ònR›¢‚ÜŒ¨0ÔØìEгÄX;L>É-Æ|QO–i“U¿îN•‰ø€ï´é¾»I­o ³…E$ Lšå\Y"€8ˆF—þõ÷/Õ¡µsuŽ-%ˆTò‡³å–­m¿>6e{¨íyU€)n«-Zc[—kÿf·J1Ê%”Û‹œ²«­ÌsÊìÃöÝW^V‡œ!<ì¶·u[ï¶ÍSt‹b Z7m® ëØñ:9UPEÎaÊ/Ø´%Ò+àysÏ•¿ÝÍË–îÏý/åvfíø¼ûìF?×ëº}H/Ȧô%ë…[Aû=z!Àfëzãç2 æ]a¯"¸ ˆ&ÚS¦GÓèýÁ¿—£×v¼·ž?&¾×„±žm–ˆ³¿wȆ‚úËîtáìGj°oÄÜy+ö3V‡Ý&)‰à„þÛB IQä°ýÔ\"ˆ†Šq×[#ó“œ{ !³f·¾GõÃà†ñëÕÌp½†Üa²ïõöο^×Ûª i¦yhÚjó,(¹˜¤Ð`A(xA‰;É9¦øy “¢€Tb‰µO3§~“´wF8ヽ§" #j°À$G9èÍZô¦(®ç‰%üJ¹ˆ+‰ÒÁš)Æ!ORXp4í…O]>æ3I‰†d…!ŸÚ0ããë¹Ùýv9hñu½®>‘8ŠZ(ŽHšÃ¢ãt˜ÐãIŒ¥Ä(Z( Œíf(ÒȱÀ¶˜H¸_´nä~7):špc¦Inº=¼À¸a£øúÿ*>ƶaF$þÓ ˆËTM#Øi$E|KôAnOSÅÒŸRDn8(@Å¡åån³¿w¹MÒ8íÄÜüx{(·M=ÄÍ05|µCkÏ–C*„±ýa÷Ù§ÀºjüÐÊQª¥†¬íÑ„»Üï­7•ó3y †%¤`¸G@Lú/ ËàñÿªÛ/ó\s·^ƒë* îî7A@ † `&l¾wqÔ}4Úî9¼Ú¹l2c±Ð½² LÄÚ§3 FÔ‘m²AŸGÁwæž{\û /Ú_Lwyžb†£yÕ/ËÒïÒly’¦© 7¥¿œ2÷rdÆ™~Й€üîtŽw?S&·u>íLo÷å² BÈh3¬!Òô˜u•³: ¢çâߥX’°¢OrwIOÚºŽÍ©ÜÞ&qa& Š—„øQðQ9EyÒÞˆWœÕ4“D ºÞvŠhê«h‘ÝUÛêP¶¨{| …FÂ>™„RÉŠ³˜ÁiÕ¨JІ×GÚí—CUù۱˻*·óy?· †jÊ´ #û` Ìîfu1^]t‰Çt¹³î/ÿ7ïç?ÆûÅEï?é²馃­0äA©ôÈ]fιáÙ« ¹ °ÀPKÖ) ±C õË5¨oƒz¬Rdé`íÉê#’ý©7I)a†ÅžyW›»Úç.‰eµ/£šæ…P~’Vpì¢]q ùßè)F˜¸&€(+˺’™—Y`ÇœŠªxö•’þW. ö;„vÌ›wï?,~ X”¿¡*RBÅ!IÇ9ÀŒC©¢õÓ¯§TŠÖôôf.¡”‡K|ôá’¤£KA˜¶—j,;ÀMô1$Zžh±Iaϧ JŒ2—ÒFA¸Õç³'Cêm~¹/±y3Hëï}“,¡” :*-tb®ÔI.€:î¹h$CÌÝ8Dªx>4¬}CÁYJ>€¼!KñÞAÚÝŠPb Ö«¯iôÂØ¨XzÂ, DÀIÇÞÅå T`Ä4üÆ„ î¥½,:Å”ýç–øšZ»ªâq¬^NVI7³„_r2Nì°Õf›Ö§hŒÓ pk ÊhV“&„ý½Õ¡EÐÛ¿/ÛTÛ®à%tbÞ':À&vPrN¤£}ÀÐfHQØheÔ<ìEz‘Î@ªtðeţ݉€jÖõZ¡¨ÕÁdž=±‹ŠôÑÄÐU¡© spEb—‚’àg²¶2D}Ð…O*$ %!ÐÔ¾°ðÃÎ÷`¸G‹nÐ) F§•±§k|ðóN¥8ÜБ£§ÝGˆ±ªS‘½7ËЄÌUÙ›•gk·©Û¶º 0…Mø´ÍLOd«¨3ã°.H 6  ©µ› ­¼}x$év¿¡mWKÈp$©Ø .¯W1ú¨>QQ˜?ä¥&L€)ÅWÀ§NÔ9bD/aQE€¨"@Tq¢Z Á^ˆ÷¢PDE~‘'ñ ä|Ëd€%¿üãÃâJ³¿À\ _V˜¨ l—ÇfdFøÔúòÞâ+é«[ÿÂ×ïxWúK׳qC]g°g“CÝ,¿Þ_‡N‰Æ°¨P1P2ÞègÎèó^ã°­šº¦bÜà92,‡!œz4¡«’ª‡õöа(Ž>kU´•v(E\äY^\°L:ô01öÄá!l@z×·?&,GíbÒRÄÜŽùíÑîˆcˆR0P7Ý «„L·ØàŒ38Áe×0rçž@Q§wtx7i$ û\þ(ƒÃðÆùØàDw‹ì[ï-‰wцzK‚ÁnG˜‘DOO”¶>+œ´.(Ç•BÚ04C– !+UNÛñì“å4#Te¡rÅøá8æ]ê…ð»íJh%Ž{ÐêʺYsñ›êfì!1‹ö Lû‹À à°ÎÑâÅrA$ò ô»vÍw£cÅIÐ>Tå\@ÉŽ—~ªB.×ÍîYr³±²wüÛv³LSGÛq°J¹#f7ûÕ¿ÿüöýß_hRƽø—;€HáäžclÇ‹ƒ´ßO†0ê†_.Þ¾ôwý"à“µû½ˆª.|UWão?ûÓ]çŽlU…IŽzã ”É ªÌuàdç¯~{õN„‘šÚŸ<²uãÑTº@Ÿ=¸§]Þ­…¹«þ·y– /+QåQ÷âÆŸ}…#°þ’ã¯^ÀŒ2öÜ⥅‘Q´d“/>=ï[Ã̰+¿DKáišêͨ­$'ùSsì63}tVc9·³œJU©Õ Ž¡ð˜Tfx ?ˆú/¾J> endstream endobj 463 0 obj << /Length 2962 /Filter /FlateDecode >> stream xÚÅZ[sÛ6~ϯÐ#5 ±¸_’Ù™m»mg;igÓøiÓ<Ð2sW–‰jš¿çàtsœt/•æÅwͦ½+ÿYWíݼFÿÞ¬¡Á‹E½Ý"QÓm ͉ bVrIhÜÚÛçV»Õ¢mÖ+øZˆâÇfY¿ ßk>cŒ8¥8~_vD¼Ž‹èñ ƉRý¿©\‹ö~q}ç¤cš”"ZënøïTÑÜÊ’pÉ»A×qY7¡ 7ý4Ïss ½‘¥ç0#RXމ¥&,AFL…¡¿Õín³Úί¼hïêÐhV¿S&WM[o›ûj:ß׫zSµë >²â~^²¢jç¬Ø4F’Äx5NaZM9žP{äºçøm˜›UøY€X¹-ÚÆÿìÖ»Hçµ×ž› =Øñ€ÚC¼öøž5~ñþ«7ÞJÒ•ÜÆÝ³°¢ß±pºèöž¶mÕ7ªE·'Ò©Ëí6·=E¤’Ý–cŽèYôXªMñtø1ÝÏËÐùkŽFæzé¿?I ™ƒ&ð›²÷YW äÖ]–HøšõRjróâ¸Yް<¿af £æ³wl5#Ó£ô€v =ðdZ£1œ8£¦ö©SÞ>¶-Ú20Έ¢¬gÔ6°¶W²vS­¶÷V^%WÀ6ªä&ªž-n7ë{l¹¨nàƒÓG%ƒüîyЮÃÔ'”ŒHcN¨‰Tö07ð¶”LÕê&Çd©‰`ÿµÏc{6qÛŽÇnÌcÿbŸGvÏ”%FŸÞ¾N¶¯@ÓÃÚë(W±†§Žöàš\Õ+»¤ FÙÁxÔH«`  § ˆ¿Tmï‹•IÃ'NžrÅ–Ù„¯P¯›ü2òPÈâ¦ö޲¾ o«í‹0s3Gœ]ö±b4¬ú,LÒH_˜!JÄÎïºN°_û}öÌ>óÄãû-°Ü’ïûG>hÀæõÌX0[;u^©^X/ßÞ"¸ ƒ$( 3ÂUðMɈæHŒáSû£aŸ5]©@«½×Kd²ŸQçfTF†u:cÊéÙhØ!>aŠÊr.ɸ&r„Mm݂ՌF}“õ¾yZT)'xnAI¤v)#T^¦ŠX.¹æDžد:yªËØÆ³ÑLCšså)Ï‘§¸TžüËË3]P§9GœÔ¬{š%KÈÖ¬ïË)1ÝÈ4#KðÊÖNûyèwI?%\ÜÈùí?kpH¿h±?ÏžâBö#„ƒ†ðÁvúÁèQOóJð;Ã(Ȧ”ÝÏ*S)ð!ZgµŸ)öK{³¯·»}6¡ ÕSÿôT³Ïò«ФûK Ÿè¸ÕD¢1äƒíž¤ñû)ÉJt\r¢¬KSŠóÒ˜¯Nx’šBòɘ «Ñ¸ifú}&óû>“ùì3O<î±ßŽ2Óo³aC¨PX•RúlÌýˆé6ÿ€ÁR]l'**§—2T‘Ó É?_—.[3”8"V’Pëx”)Ö9«XðDÌ ›XXnŸ‡¡›zûà¨zÑ6uZ~Bt…䊱Ò8‚é–%qí7u\»Zn×/²þ bºì•ÿ!I¿ÞM\ ^K#‰†á– ãôUôõ„îþŠCŠ}5gTñf=/áí×»Í*ô\5÷uŽ Ö¢;d÷§¸iüLê¢ÊÆ1hÔ¯ÙTŒKᄃ ÷À²ÒÂË_ªÍÿ°;B~¾ïû»ª‰Ä|l¼Ä Õ¡šsVàĬˆà¦j nâÐûÕ´D ]-¥-a–€.Ì芞A¡v—ŒCjæRܧ+­‘ó,j¡áÃ\ ej¬+¯òŠžØév›‡ œp ¾ »b铼x›5Wиµ~µï­ ‘\ž.Â29ôéDéÐ&ä>F~d–3àÉWÎQc¾Ÿ LAS¬»¾ÈÖÞ5ÚîsnŠ»N©ª67½¦DNä”ì¥NûTºøt’ÚS70J­£F/ì½/¶àÅ”¼/¢«€ïš¼rºi'x ¡“Rž€¿ÎÝÖJAM¤”Ú"¸®¶Þü1Wà!—áõ[šÏžA \L´°Í»cǸ)±‚!2·ÝݨÁïÑüh›@ zO€²Ø=TøfþñSøæa³¾®®›%Œ®·¡«Ÿ.°¾ø^É 34Z'Ðgp}ù<‚«±¯üŠ8ŒfcFq§ÙØÊók{Dá‹jÓ‡ ˜áôr„퀛†î˜kPÚån8Å\ßNR‘ÛõréÃÛÇ RÌD¸#£—#®ôaWáL/²†Dc¡­ºÒú&ÇFå ÿ¿„‹ñDúCÔÌ9$.`]Pâûlfqÿìí;:»—Ù•ÿG?ô~ÆCÞCgËÙ›g¯Ã™ôDß8„o¨¸… ­;´àü¬èε2¬Š¨Ù)^é‹êü ÂWJM2Kç§DÓÑÆÕûF™.òˬÙj1/bbXŒÌæÃp1 À€ËÃcí!$뢿úv nzU¥™üóÜÚŽ+’/,û£Þ+‡Ð ƒèW¿#‹&:˜.½ß·!ðèý>ÎÔé¤[Å“Fà¦?Û‰w :­éC ÄâÁÅÄã?™$Æy ²äDjž,ÓÜÙ÷g‘àD«“3øÝâMÎC³ê×ÛõæÚ§pøèÅ’¼Ãü ïÕ±1`qÊÐaþ¹ß¸Mã—Ýo ù¦,ÿ ZŸ\šBò‹%|h=äã›»UÛ,cÁäÀýó4­÷»yèn³ìe`òËŠäAÇÁä3I²J °òàÖ IÃÅ2lô·œüS¸+‚j„Õ•ï:z5„¼¥á¦×øÒÛ::ù©B[&@ø‰BÛ<=÷|¥,º‹,ìÌ®«´ñݺõ¦‡æ‹Å¤¿‡oºò‡ÁL»ÊO%SëöYɱ[N’BrÆNÝr±]t Ë0ï ¨þ–’Çxk'Ǿ/m?mÛz¸{µñ[–”v`"t¿Až=í¾9qåñs„ÒɶӲ:W­'—摵q©„.^ÕY¼jtíÆE·ÌM “]\í²JÝ•­ÊÖº =¾bÅ7½EÙ"¾ò—¹HMžfå‹\èïa§t0j ªRñÙ—ø+–Ý6¦E$sC±ÿ:cPÁ±— &•ß­^Y˜ìxÎzô–"¼g_I6D¨Åpí,‹´&ÔØãå'ŠïÝ׋ši÷Œ·Ùv×e%qéUwöPja‹7Í}³¬6]ã¯é-ózÁ¡ b"“YMNX8s‰“:ÄSéÏ¡&~*æaHéÀâñðRˆ³NÈÜ ^_Ó4 Ò™#f“Ì ûö2+ìüc€ÄiŸ>ÙÇÅÍYGÐg"B„‚ø²¥¸I¾<§A¯¨œÞÄÓCÒ“+Ï.¦÷ü9tE0[H*3'B> stream xÚåYYoÜÈ~÷¯˜G"öö}ØðCد×Éj‘^=P#ŽDef¨ùõ©>x4§©‘ !/‘ì)vWW}UõU“¬0ü‘•Á+Å2\¯6ûØ6·+ó÷¿¼ A.Á|"ù§Ë?½bE02ØÕåv:ÕåÍêSöç»â¡+›uÎËØËuιÈ~.š­©Îjûï³ÿ «C»Î©ÔÌd”¬¯.ÿúâÍå°¶ ô‰JZÉS-ÕTK* ÒJ¯¤‚1ͽªïí’?½%x%‘QL[A‰«œ É”—ú3îãsxǬ"A½ ä± å4uB$5•¿íE`ž^JÍça½ÐߺkD4y’îaéþ:¥8!H1ª…ûí±x.®'BŒ$­J‰þq«âÞ$ G¼M‚[/ñéíZ³ìxØtU}ðØz[íÊ« ,µû0BP;}Î$E f r*D(by½€‰lÓí7åׇ6ÌŠ§JKíö‡Op­òŸ0S 0“’½ÄEjÊÝÒêés<¤ö·T’#WQ1XÈ 8CüŸû"iÇÈKfÌ•DXñ`Fâ…ÿQuw`>Œ³î®Y“¬\çî5&+šÛã¾<ØTÚµVJe›zÿpì‚@wWúwÁF0¢³rÓ•7á·j_¶ãn&Þä°¥ÎeRtº\-b#>$…6háUöªU¯OYlìhØlÛ°‰D’1ݪԊ áQ·›cSn]ÆÈ™¢Í‘}‰¸Uìaï”ÕÈ>—ÍçµY±ó£Ÿ’9ÏpHPC€¼çH5„ã,Ó*=(~Þâ‚dEÛ÷VA¯Â]ÑùÅ­ªCÕU½ µ³Þfs|(›o^àóÚ»µn íˆái„B9SsŒÆ øÆPGë<Ðçt³ë|ñ¥Û[“à €ŠiÐÏ)°É û‚› ÝoÖ <£Wæ¹ð™†“%@Z=, Š vMqh«Hp£L#¡(=†R̘œŽ~ÚjL« $µ¸nëæÁfS”â@ψD„/ý¡îÊ—©u™z0Õ;›š±Ìª®õ7›cÓLÂ~Ù?ìÊÞ§…]Þ&BÀ•Uxg;fyx’Ô¿pW5eòà¶wEt;ºvè·Þœp+ˆÁ^ÙÈMï—âzgÅ϶°PSïýCáTýæKΡ>äÓe–Ñz›òÅ)¡æ5aæ=IÅ+ ä”fšz·‚òîÃÇß.MܺϡÑñ¢g@~q?Â<Þ„ Àr‡ºöaÔ)3©˜&±Œ£z6ÑŒ´ÂFñRÕáwL8¤­²­ö6sÙªt[ʦpIʺz_tMõ%£ˆv>·þwâïF¤ÛCVõ…Q†°îÑ«²&`Pe[‹(‡B 9c^6cŸBñg"‘ßANg†,ÏÇ w¿OM(€Oˆ^Î!‚HÒãÀÃ夻 <éqK´æÉ+žH!=bB¦tÂ#Q;»Ä}j -¿OÕ$8ei“ª&‰Ì.÷ 8LL óGs€…=µ·YçØvÞÅ®­ý-äÌvûÍ[ØyHq$6QñÜÔ‡Dß6«»¤Ò¡,A!…C†ø˜h®@9A "SÄÁN£MlvQÈÙ›OÞdhÐk²`iBf¤õ’ò¨»«îÚ\ÌUÜvæTé 'sBNFJš8G&Y–Ph@Í»­Ïø·•'I¶( T\øì?+ãÜ8©¯ ñ+o= |ð¾>6¡¡ñÚýX…¡4K¤Ü²`ñTš8øâ*i È[Hs¬abJ÷ƒ´(®ïzÖÉ4>avì¡©¯‹ëjWu}±…Á‘оJfvejÎA”Ç‘i]ry]ãàÆ%‡_ÛomWöÙ¬)]CÑMÇXð*_Î΀KNù™v„™ÁóŽäø©ñż“~¸JÓõI?Â'º6>gÐ{i/Ò_Tyå?$é ÑP—uŒ¹_~»|"Ÿyÿ¬è´qMÏ@ ލÉúÑM±Û¹à…±/¾&®.K?µ+6î/’ý0eHªçk‡…ˆaKz`‚F³¶Èí2´E¶høb‘yKm´‡-\Ýž– « ¥2z†©„¡“v{}ýJ¶[u­²t­²M'A˜ BÁ|¯l«63Þíöà’³÷<çTã’' Ž2q€Î?F=+SI~š„Fò¼BÄDûÜÌ»m¨*E¢ÇÔœ:hÞhN²SßΜÝeúŒÙV ûᔄž@´­w»ÚW-È Š¡«ÊðËÆÔ®`ÜáÐã´þil?%Ajþ¥aÎ=›·> stream xÚÅYMÛ6½ûWð˜\(~ ‡dh’nQ )Úl ´Mrp7Jjd×Jmm6í¯ïy‘•,+’åÄÞ1õHç ‡ e”%§<ã«”¤ld…_.Z<ÄÑì•'|bRd³òɨ` ¿£ Á,|"ÐÕ'«8ŸœJvTÖXV6`" ŒoRÂ+kYYg¥ÀÞ;ÅIðaaƒ/X:F …1žÏ⦿“ “ÉèÁY9 –`Ižx2eÆ#—òÂÃCG†«\Õç#:´ÌD4¾¬É0ž8$ “1(Y‹à``2Ü:ZEˆœC$ñÄ;¸&1ñ Cà¼o:±DÒïÂHQ ГŒˆµÀÐËÂ`„¼ '¡Í+ëITÉɇ¥Ž ’ÇGV'“°—@¡ƒ“fþhâÂfôŽ$-ˆF”ç-I†@Ç`È(,Þ‰.Œ(ã&chq ™AVFÀ‡@qA -ADÀ$¶’\ܤX`IBnq>•%lÁϨ$%,l°´VÊ”ãFÅA8b¤'øêŒB!RŒ³SfàÄWÎYZ€7^ LâdÝ!#<äÄXi“Þ# Yœ 1Fxå,Ò" &ÁH’hè\F N,X%““Të‹GÅSõÒ#ìF=WÅïü©õÞÖ×——¯ß~;„ñÎkðÒUëZ=z¤Š3¬.íàgH{¼¿ýó­@ÞyŸmhlŒTü²©.ÎËZ½TÅ/OÏTñ¢üT«Ï“¼ø÷C‰Ëwå¢x‚ Ëu½Ej6ÝÅór[]o.ÊmSš¦gå›ÕòqõI½4h™*f÷Ó,7è \ãP{©ÈªÑpŒaÆ¢µä»HÌ^rî/9Î^rúòröq-õÙHDZQ|·^WêeS¶Å5)Ûòwoê·(W›7åf7¨y-3_ÀYkHg"ÙÜÚ9Ôh—´ÇÆgÛüîüú¯ºç§Õú=Fk(;WÅoÏÜ}=ø»®?l¿)Šê¢^~,õnAo«Í»R¯ªâŸëòº\­ß…Çã= µ1Rä-<“ƒªù=Ù38vss£¯*D¯ÒWËÍÕååR¯—We±­ÞÖ7ëa'…õ4!Ñg`8xMHÏ™õ@ΖÓvG6ýL³S0ÎN=lSm“œGQ[9DSóû¨Ôkçܺ¬‹·ÉxGìŪxS¾]^_ÖE½)Ë>Ñy‰ÇcˆHãxûª<÷KMž]jòm©É_*5ÞéN»Fé9夀H‰0ô*¸Ï|ÿP½¨¢ûàÙró¾úø ºæÉßËÕz;XR¦y`²n¤¨ÍšE¢҈ü²Þhˆ”ƒœ#—.Kñà¼^Ö«j-毷IÖ4ÿ»­Ë«í~zå 5b4ÄìqX3@%ùü9‘ ÅÜ)yD¦_/òìz‘ãÉùsË^ðNC¥zãt¢ ! Õu˜»6M?—õMµyßç)Ï-@ìÞ{prçÙc@®5S ÷ôŒ\•Æ2r3³’íE 2œLèE©³Å™\÷NªƒdM?zivôfåI;­uÞóFµý4±³ÓÄNH“IGæQœg¯-1œÎáÒvTzÎ/$$üó‡.gmÒls…Íçárq`?ot±é$Öï±îì\Ögt†· >RöŽW„/0Ö%¦MY·êtŠS›²ûf)öY G±twˆÊË£Q‡mˆ –b:#üžXlKެÓÁcô‡Íù:ǽƒSÞhÝçÁÙâ¹Ím‹´¹ x×cÀ›¹ûÄÛñ=°‡aÊ:š8Žƒ õ8€Çp;Õ: ¡§\D:ÓÀ˨)u¬KâpÚÆÝúz·§góÞßy~âÎó¹Ç;OཋñÑhy9Š ¤]rS˜:¶h *.ëmwzÜ©¯FÈ÷VÅ£]Å“÷Ó»¿áäkDÈ:«I§ÝËpå}X€>9Xÿ¾ÿô=Ë7rX__ýUnĪÞÊ÷ÇÕvUoÅzõàé‹gO^=<íŠJÖj#ÞY§MÄí*>:§ôÕ}“ó<'üçKÖ*-àN–|¼g×d“Љ9CÑêl}?Ó‘„'Ug§µkÜÑ‚ð>nŽ”û›0Î-~”&Ĺ‹ œ4¢$Ò$ß)]ƒe°}’ VÁ±Jcï,êÙI…;çòú">ع<… }Ã6‚8Š£xHuìá<•«ÚÎBræc%ã ÃG^ò†´ÆŒ»ÜlæSŸyžÍ|œÀ|ÜÛ¡^ãŽÜ{]ß ÜPx;œt»ÂÈý dz7OØp30œ¼¶&âÈXÍáÈËõŒ ÈƯ/ñ¹/ñy¢Ä¦Gæ$þÿ‚ÿNí endstream endobj 474 0 obj << /Length 2020 /Filter /FlateDecode >> stream xÚåYK“Û6¾ûW¨æDm‰^É™šC’²·¼åÌÚk¥v«( Ñ%‰Z’²gòë· ¡Ìxã[*ŽIîF£ûë0›QøÍr:K… ¹Ìfëà jFëû™}ù×ß_0'ƒ`<’üiùâ‡WI2c”ä4g³åv¬j¹™}ˆ8Ÿ\þc&²œdiZÌèÏú¬Ëã=~{ñrÙH8¦'(ùµ+jì ã’$<©L&¤µ¼/«M1‡ùItk”$7ÆIX„%VòÎ’¾³2+OÆêþÛv}³Á oÂﺮšßhB›òwÏüÅðÿCï¼¹ëö°^mÌ¤Åæë)Î^ë;X›S±6¦è‚ázqꉆ}e‹;;Ç Ÿ¨Ñ۠×oÂZöúxßîð­Å¹Î€Ûª¶sË[v=™fä#2‘þ¤7(R.®Ð4lúád|x·h˜qà4ŠDì©´õqƒž„µ¯Œk ]اñàza"ㆮnÞ·E«ívsÕ Ã¶è/å¦Ýu#Ü= !¶z$JLvÖ·Ã/Ùáß`Çß¹‰qÉ‚ø?,„!/™dÂ>F» ×^ß♫}µ.Ú²:^-®ŽUÝî¾è¦½¥ôHtU=TÛíÕ¥Š|Ø+½7’Ëò ¯.æðã øòá¤×­v@ÐTŸªs}t©ãéøáU p& Î¤PCã”Ö3rV(è7<°!ƒLBR(þQpËK‹b)aKI£ 4}&Xþ¸¬¢Ágn–g¶uár‡«í°z+ç<à)ᙃåqÎAVןçIûyÌ3}èöEŒ“°wI¿w€¸L¥}IyËÈHšeàGÔ)̺‘ þ³µZîí§bÕTõ —`{>Ž5{<…Ö=çhÄLgí7Ó]²0Wöy\!‘¤I6Š0ÏÁ¦9ÓõíœE»¢u?0ŒƒQóZ×Öëó©8®]l>;é\§ºZ«r_¶%à³)mÔ‹O³+ð&#ê>Ôz¨¨q1ôΞBËQd('âR¯N€?£LÌ`W”£ö¯ïÞþº|ÊgŠK!4e~•?‘Ï‹O—2:apxè‹ùõѤrÙê¦<`¶‰ŒFв¡ãµ˜"cÑ¡hëò‹-DÁq€~'ç`ÏÒ¬.ë@»ƒÐî½.ŽMé|­Mà—m]ìØÅtŒYÎ “™Ÿe¸b§Û W^Ö+!¦¬G‰OÁ°ÆÒ1Ž@¢¹(9Aœ”&C¼¸ $wÚK•®ö?ÂR˜ø6…w¡%äÐ3ä´—xJÀu5-vßðEöõ£BVèÐ'ŸtóéH`fð1‹½Òår¨®SJ˜RÓLö› ‰ê#p@È<7­U\ì“%€K@ˆä[ÈÚGûÕu>(e)I–Lšäº:nlJ£Ð !ÔŠ+‡ñxÖǤp4õ­“¢5y*2㜻@ Xˆ×°…ˆÐ]óÌ‹—Í„úÍûÞ{Ë.Ä\R9ƒÒDÆ0ŠŽçBFÇSàr Üx¥q»EôÎ"˜˜%À„04ÎÀ¾òi£¿ï)é·ù7Áf-£×[‹êÕ¡l±/Úï´}©usÞ·•AÈ7£kK[6ö×Ùö<쎦1ôÝ1ˆ‰±qÄú›ú´jr§bÆÏ¡!Rlõ«+¯KkÉy×ñÛ`6´A3æu¼0†ã•ÎP”àkò,_qá>†£–ýxaýû½©$•G_Jèåf´ÝÕZÛ×¢¾?´e Í"˜¢@#•ü^œ”{C9rŽêÇsÁÝ_)=þBJßͲÉJ€Õ$[¿¦òöÿ•Ïcùs©|:¢ò¨Ó´›ŸgÈÏEšÛÚÀï—j#MÇ'È µ‘ ö^Žê /+Úî‡3cS@ÂϦþcw5(áð<=~{ØÀRcÀœŸL=â^|Ú·² Rtš{Kž¤élÌrårõv9‹vmÎâ¨ñê þU¹“ß327‡ö¥žÌÜìÙÐ*„­èV—…¨^Ò_Ö¹«V“ÏYw]%©w<¥îxJñT ›yÀDÒVlt&ÄïC׳Ÿ§·Ë7”)΋ùH2©ž¼Á&®zÅíÎ,š"ª4ÖW[ŸÜ[÷=þ ‹£EòÓ…áô~3wí¤ ¶?·Q¾@øW2ã%x;i¿Ãh:†³ð9*—Pä\x‰¥Üeâ{툄ô:È%Ø‚Þ~w‡6‘JÀ]8.q詳ðò??þòöÍËþ¢ ‚ endstream endobj 478 0 obj << /Length 2031 /Filter /FlateDecode >> stream xÚÛrÛ6ö=_¡ñµ+¢Ä…7gòàzìlv+7‰ÕigÚ>@d3¡H I%ö~ýžƒJ¤¹éŽG&pxn8wO"øã“<š¤R²\e“ÕöUd¡ÍÄß¾â/Äp€ùãâÕ·q<áË£œO›!«Åzò{pý¨wi¦¡”2—ÓP©8˜ëæóTdAÿ¾Ð;@,ªvŠ$“y äôÏÅ¿_Ý,²c!¾SIÄüVËd¨%ŠÅ"$™b\*RµÔÛåZO>ÞÐ#bñkT‡\2æÝIQ8á,‹¦{áÿ”pÌ^™?¢8â³»Ðþ`ýlÖFŸ°ù¯iêö@ü-!Ñ}Ѭ ý€$V©™%úg³f/¨àX…'¼Úýf)ÏRwc oÂx&£¢s§Ø=9QXð΂ðƯÂÜÏ¥4ÕC÷ˆ«‰{ž›º!Úâ ¿D™Ï \åL¥ñiŒþ 3œO(#Ù!ä­kA›‘¨I×èª-œ—áEc»®lŒS ‚ÿ†eÃÏX¶Ýåq>òa5ÃÒGùy†J²ì˜Ÿ| cÆyzZ@åXd''JC!gùÑè‰OJtl ¾ Q,ø÷« IœC™[ ðüç‹V3©Òk?œn‹Etßvά0\´›gÜdät„®êj]»-Ïñø‰Hl“ ZV3¥\2¾wˆT¢<•™K‹˜Ã`#˜Ss9eyžL¡”ÐŶô¦.´bÝZ°4Wƒ‘içg;_‘g½v‡eàAsiD¾ü y$X–Ûb$âqMþ‹$<—‚ãJtl®Ýaýìu7¨À®b·Ïmg¶„Ñ墔m¯ñàÊ›ço Â@‘¢$K;⑌hæJ~íîõF¯¦" ½¹ÅY¬âÅ%,ÍòÁd…Æ÷;½Û#ÂÌ“4¸ÄGB´¼&à¯ãÀ´G©6ê'?ÿ²ø«ÎÃÇÓáØ‡é1Åæv’™r&M²øÔÞ ßà0di Í ¦méUcviM…e˜kzÑOFHv¾RˆŠPÿxEHãww;4ÐPIŒþÑL¡û‰‚ u$Ü\„{œ%0¦ƒ` f E³„w\­¡Gþøxs{óñæîúæÞW¸3–«ØÍ¢OFžz ´±øpø· ¿EEÁÖY%¨H1>ÃøŒƒ{÷úmcà’×8è¿,übèíÜà§/„èjM ÿ8B; 7Å—©p‹™×c2bBëÃÞìÌÁéP¡¯öCZó¹%¨“ÃO¿±Q§vüF~£oøeN¦Ác.ýKyFqñÞªÚ@Öoa~Egó4¸ù2!¬Ë½vÿ€Ä]Úݯ s ¼ÚíÊb¥Cß8µ> ¼RòÁôqô+\ëžÑ˜nÏ¡·øcGA„%´01Ü=ñÞôspÙÖ—>¡*f™:ÔK¼ñá·¿„$.ŒDLöávóÛÕüýO7gs®ÔxþÉ`½ÍáîŠÙ‘+ìÆm±¶6¨& ÌŽ»ÒhKu|F{¬$ˆÓ˜õ¾Zk*ôj]´Ÿé¥nMU,‡W¡‚_qí˜ê¶ÝÛzŸ«¾ûäÒÍ…#r /Z÷Ѫ?Ð ¾¶³AÆ )ÑÓ¶¨ÖfgÃÍÀªÂ`îÕl ‰¢`+{—HW—Æ¡Þïz(ímÝA€µde“àšõÞ‰)ë–¢ t§Á 1çîæ„ßžÿ7­ endstream endobj 482 0 obj << /Length 2046 /Filter /FlateDecode >> stream xÚÅYYsÛ6~ϯУÔ1ÜãÉC/wÒiÚ¤Q¦n(‰²éèpI*iþ}w±à%C–§ÍL'3-ØëÛ]DL8ü“ŒOR¥X¦Ýd¹}Æýju3¡Éï?=.Âd@ùÝüÙó+c&‚³Œgb2_YÍW“ë©Ô³óŸ'ÊeÌ¥pñ«ŠCQînð·g?λŒ”O¼ Rž¿Šuš ¥éÐæ¶*ŠY¢R>ÝW8Šév_…•UY¬iº¨Šüã̇=á÷¼ªò™L§_è³ ´«"_«|·¢¥Ã®*–û™tÓOø§¨òŦ`³Ä;ýcæô´  Ÿñ×|‡ZiöÄ¡¨›r›7®¹ ؃Zí Å„!y^ù.™—Û"™Ïœšî“+äž—›ƒJééŸÜð×óùŒW€hM#É$(7-‘„$fÌŸ'4¨Wá–‰ Ä?ðWØ+SÚƒÑ6øÓ®ZÓGý¥nŠ-Íóš6äô©é«n@Æ@½Ü“"J?ö‡°þ:¯>âJÐ'Ñâü6Rÿù¹làÔÛpjãõæ§÷ùÒ«íù•ÕC¿PÖ²Ô¨Ö×D3öÃ4, ¸¨c ÝR\Æxhætçñê+ðÐ_‡‰idÄãæ¬>È9-ËÒ‘K¾B›¸`ÚØmUÆ”kù”±“,ÌdKnоŒ,sšdÓâï|Ùl¾Ä¸;ɤ”OgŒJ Rbñ‚.ÌàþÈ,îöAª5ÄV±¢`Âo—=\uŽ\$ýŠá/¾¨÷ÕÀ0@ËlúKÑÄî.MÊ”ító'—6vÿŒ¥¢#Zøø Â&»pÉt&ƒaDðòಠׄ°’)àš›ðJ‡W˜ß†5êå 9 Æw¾jjšcXâö \24 vóͦçväU{™{Œ\D̦Üïò jÚßÀôÀ d‡zŒ†Aœ`ì¾C?ÀfÀNZ¬ª–E]_ÐÒgr­1ö;‚Š`¶®ö[úù¤WK sý¨ßq{ ôJf¨9ãV1Ç,@²S½·p;•¦-UÈà˜1ðÈ¡÷•'*ÕÅOPåÒiŒ£‡Vg¢1uÝõ^RZˆ"%d €šs(çÎ"¥y:CîBJ1ÉeB•E8'¦XšQzµmÎöó6ÚA†õŸ¾†€1¸ŸE>èæßój9Ê…¸ö=æÁ "¤ —ùŽ&>øÕýöþÐ+’¨Kíê[{n6{,v>×/‚šìÄ532+c{€ G4"àLâ2¥!Ĥ×4(4 ††4|CÃöe¹(«#–üÌe¤hz;"\6Ûå{&~Ú=zPó`ï¶irÜýö⚇£Gƒøà³E$|Eêsn"$Ë„m£®¥ë¢8áL*»Jê *Cܤ°U1Ž`kbƒK ³ x2³°ÏªéxiYÕ¾ü4Ó73el]ç7-`mYÇâDYɹ=[+$ñ½¾ÂÒð°["x“#]A¾ü¤—!XfŒô×j9„X{Ý‹ÝjL_¦ ´¾¾o3( lÕ²‡0ÃcGk&{¢·Q>L¦é€ˆ©H˜DÍ|ë¿h`ûÿjÀdCŠ‘.b< õÙ¢<ÅÃ>ÇÝ¿¶Dâ ϤÙ8T¿'°##l Dlˆ„&Ç¢ óu¬¼¯{¢µï±# F,«ªX–åbꄇÝJ‚û‰zÓ)Á´ê[$H‡ð1”¾úõÍûù»^ccÂŒ ™mgÇY.•Cñòâî”ê ¿¹´ó¯W;TÏ®„¦ ÚOìéL6½)vX¡JðÚÒªü›õ ”†«õìÛhù€v·ó20Í£ß1Ý· ¿F1”C7•Gµ â4=âst+ÉÒþm¢þë@½F'.Í©`ŒX%ƒ6H‰c¹ÿµQ…xoõZPUZ…÷ 8ÝTù®. hðªWqFõ*ΨHÏ›öýàaQÅ™³×­`…°nõŒOÖ­’‰Þ¾wñNRˆ¶$P“A .ü“ ͖ʰ,›Œx /ÙÛ±„ÎLØ´C}ä]F¸'1túN†pv sj\ùg}-åá.¦.Úõñ>œ•û¼ÖCQ«ÀZ&ã¦I¸VÛ …Êp‹˜vèú?ZT™ ›å]q“·}õE‹¤+º•ÈPcVZj9,h'åÎÞŽMz ±O!n –ê2çî‘ø3)³=@ƒU˜»Þ‘E™û=£LqwŽõøæ¸Ë{£Ù³Õ}¸ùoïççR–{Pè}”•ŸYoüCH:¥TŒ³½'¬÷UX×Qò’‚i!! Ýá(uÃOe %¶V°f©~À‰k¤êÊ¿ ×ó/K–ÞMðÜSp#ÉÉkB»à˜„`mÔq P}À'Zëîíí»é^¡ä€k©#eùØZnl­²`~IRô5B§ÃcžƒoÍfì5Û˜.†î»=‘Ö³T-¦LÛNÃäïø_©ŒƒYð4-¥§°~Ú…Œf¶’¹‹¿™ÌßèSY“óàŸÆô÷ìkVÓ9²¢wêçSÃ

> stream xÚµY[sÛ6~ϯÐ#5¡¸l›I;u7Ýé%±3Ó™$´D[ÜR’CR›:¿¾çà”ÈcïøA ypp.ß¹ÁlFáÍr:3B\ÚÙr󌺷ÍíÌ/ÞüüŒº.&”?\=ûæB©£$§9›]ÝÌc—=ÕÕjö.ãjþáê—g?] œçg‰”Gg=c†p¦$ž Ri+ Ò'ç ¥yvYmoër¾Fe—]ÑU»­x½/÷%| Ÿîۮܴ(á¡2 -ω¡ÜóíJ#F†ø02tŸC÷°n³®¨máÚ ¯ÖózbS›ÛUØZ„-ûv_Ôõ½¸ž/¸ÉÜN ´E=gÙýçù‚eå u@¡™ L1/tY´ìµ"#°¶^­Ë «Ž§µ°ÙmúØ+”0Š´°d=å]±Dýþš+•· ·|ªt‹oDv³ß.QÇþq×xÊ5h[;ËáS·.ûïu½CŸÂ7‘uøx‡YÙzúÝÿæÄm¿õÒj9•v‘ƒ^BƒM4ÑFy¡ßSf±˜3N4(Tûü!³s¥ÝRÀ2a{„é÷0À”è½»hËæsôVã_'·—[*ÂsîÄ–Ô4N¾_ Ïd Vs=µ E°Ëa™8I2¦C§•²Ö‚Q…­ÏJbp´¬ÒÒª¬õòÀZ´,ø¦D}£†ëp¡68_ÃÞm¹ìÊ•ßØíük×¾ÁïÞecß·íöÛUOwþxqé©\P;¯ArÖÄð¸{SAÛaãcò¬hšÊ§ DÍŠår׬|¯ŸQGæ¿þ”»ªm±fàû»fçµ,ÛÀÐcWMÑ¥­® ɡæ}¸ù¦þ(Å¡åXri&´uÀÛÕ¯»NP‡]\UAgá¿ÁÂÇØ‡.ÖY‡CFã¹ öñ' ÐGãÆAU õCnuêQR™C,³•uZee8b“-¥ƒ®Ïqcx(ê2öu©n’'CPÁ"cƒÞ6ûÞÿœ…"¡† ² ½"‹ƒµ ¿¹/ï.p =¹䢪Ëã`ÀH®”OBóióõ.̧Dšp3¤ˆ·)6H1àóÈÔ¸ $oÁdõõ)&úLþ| &w4Å%¦ùù‹+H`îçc»Ùô}=è"rÉGl(š:bDœëbs½*‚ù”L(ö‹Šðþ êfŸ)Ö»Ît–·k™Ç™íÇÝæâP¨’]UWŸûqXš5eÛ§‚6aÖ_]Û7|wc¿³®«´ðçEüm†dŠOnàv|×Ín»ið™»)u:Q{y‹TÀæîÒãñƒã´ @ 5܆ÉU%q! §BV)V÷ lþÂHê×Å5˜/´Š©´,ŸäpÁ@›Ù¨ú+%N¸àÓ>¨[~¤*šdj5ЈvIþ°#¦þ»»n=G¼H}Uq¦p)öyÒ-Ð j~pLÜLÂ’Cãñ•²†]¤L}’…¡¿”q~0 jb”/=ÊCu*†ËŠØ? Ž‘ X@s-žÂIX³yܬ†¢(K™ªÄdn{O)M ê–ñtŒÊ%…˜æ)~Ì)R¡¢ê ª.8ŠUXé,ä®ÐC~rPLœ eq2tŸRÁ‚Û‡5]©‰ï>/NgN(0ï›`¦¡é°?I…¡™W&ì1¨îôfëÕo¼½º³xt— M¢á¸"Ä^ƒŠ0Þï½t&d²~hk|ÂãÊ3©O 7©Òsp3bQ§¢Žñ1êÒ›œ…#)‘ØÊ1£ ´–q-û’þ—Óµ×]žÖ]Êãæ_)ù´>í%³– Å@Â,%Òe t~È)¿¿½:&oϳРÜ&]vGžxóðcšÒMw~¬ò½A? Ÿ{ìë3ðOrl.¬Ëú£@®¹QsäÕ6 sÑçŠøçÃ,#a ÛFL.³W78”ä^¤_XcÂß²¹õCáªZú7§0ÎÝMÉ8gÿ cñÅ‘5Ì¿(jQ»' Ú†1ÑJ"‡11”áõ¤aLê¦íqçBî§4K´ÞxËÁˆ{øŽžáâ¸Ûv{ü¾ópkeÑôÈÝT€â^º£¡•ŒóB¤Ób2ÆCÚ’:”I츼¡@Êq’ö×£'n…ÍXºý¿ÉÞ!ýƒwñ²Û5­±‹‚m±éWÕçÒ… Ë^m{ª*ì[mégÇ­{öu>Uu à|m9áú`Ô‰„BCÁ ËuMúÿ“þê2Ì endstream endobj 490 0 obj << /Length 2685 /Filter /FlateDecode >> stream xÚíZÝÛ¸Ï_á¶/ZôÄ¿É\à.Ý͵EÒKvƒäA±µYu-{O¶“¦}gHJ¢dÚëŸ>D4E g†óñ›áÒYÿèÌ3Í9±ÂÌæÍ£ÂͶg~ðúù#Öå°0VþpõèÛ )g´ ¶°tvu“ºZÌÞfL½¿úûŒKŒ¶@ÅÍþ²«vU½úˆï_õHÆNäWî³¢cV(5ÄÌ”„rá÷}}~qþúüå³óKÜùÛ %â “³œ*R(ê?xWP헎ŤŒ(˜ â<'g9SEöÃz9?c:»ù~k™]†ùç-[µaöG7K³Eåß¾¨ªÖÏ”«…ŸúGøðêÌð¬­?1“U‹ú›ÀŠYa¼ Œ©Ž—Wj—ÕúŒÖííÆÏ†}hö¢loÝ+üï“;©¼£—SN¨ zxvSÖ«Íã³\p½X£ ÀÿÒíéñqð“cµ½^·M¹šW8©³óOgRfårWnëõÊÏ}®·7þ“gëæn·Eà¯Ëy]õ~w·¬çeî8+Kž#¤´I ãGA sÎyö¯zY}Ae†ßÔZã†"»<£lG³y`^+Âé‘EåBÜÁœ Œ\V•ÿ¨\nÖS I Xigû›¦i8Æ­ë0qr n‰§¤ÕŒ Â…bŽ ©œ¢¹òag¹T ¬HÝTþCZ°øKE‰bºãá|PdOΤè†Mj;i‰¿ü²ÙVMJÀœ2J¨Fß±„²àúW+ŠÎ‡McF2¢Ü÷Œìiòžûg,ØdõÆ?7uS/ËÖÿØ®Ã3Í¥”Hy„‡ <~`†]'è׌è?óênÛí\ö£ª­ü°lÓìC¨êÙiR¡ ãMчÏw“ɨrQ9á±^T+tÊ-8ÒÒ»87œp6öðMÕú0Ó‚F9cÙ|½ZUó­s…ŸB½â³ôÍ H^]à·Ï..ý/ß!† AÁ ðÕnƒÖÍD†zÁ%Îî×›mÒDLA„±LdE7gÝ’¶‚-7ÛŽõråðdл»„‘D7ÁRÀ±,'ÒÐQ¨Ù” ž µ ÃƉ®{Àºµ†È`bÓB{‚èwy Í÷Ì6t’ààƒ ¹MU…éržø@/X}\ö‹ºõ¿}ÀÅÑr].òEu畳êì#@íÀ§5D¤¹{ÅPˆ«pœc£iËmÚÇCzsU)±‘ƒÔï Y¤HAtý1¯‚¡!¸~¾©}6ö?1R¸0í£ì5È·[õ1_dëkÿMÁ œVv ’Úo“î«1¼Û£,ÂÑ-évŠŒö¯W“ý½¥áì ĵ{`v{Ó®wo€aØŸòìzÝ⪃T¢µ ZÅŠ©] Úv kÄ­ú”ã ÝøÆ!åªQ 5q¼,Á#òý¨örÄã:Ëc¬-„¨8Æuµ×"À…µ‡eÈûå»Ð‡Çãë.ì'øº«Ó86²ØPŒç\« Ä,_òÍÖƒ -³»vý¡ü³E¾¾¤KÔ‚¨Ƽ+8íº `³Vs¬—ú P(‡ÖÄmJEûÌ,Zå‹ed%ËÈçbYSByºnmj•!là@6P÷ &º >Ù&àºl²×ÂZb¨¹·,g„™^y–'F¹Ò΀„ŠqÉ9®pªsïÚÁÊÍã4·Òƒ?! 06_ã  ”å,>¨€õA¹ª\¦¢žS°,ìj:„“VáÓ§Ý#*ûƒséwçû8­0]ûé­–Sµˆ‰VìH+EJ+’(°K ªPR5°gº¾‘î0öbþèÀ<)ˆÒFç…ó_ú–83&õŒ ‹öÄß¾/f xj"Lâ³[ÙÀJ¨rЇ–³ËG¯|ë|RKAÈå@„Cn,¸öùÉÑj¥e㟠åDk× Ý ñíþv‚ˆ¡f’Ô`3õ^7é4§a{Bf÷¥a@¨ µ>ýºµü¤“ke“49IS±˜_šÂ;:þCŠÁ]÷@¯ï {X;­".‚âïŸÑ!ļ2•“ës¦Œ»ÊT 4höo/zsu9ôK†õX@ ¡Y¢ƒ3†ä€Bº¿oñï%$Kµ‡®ú¸Où'z`}´Ÿø>.=-dïÑÍ—¤$µ%ÞM.‘AB>é,”î2u_ K&öšVjÛ~ÍÓ yP7rO7â¹5ä>æ—±Ø/± eºª¸_’Œo®œ³EK×GïÙíXоžW G‡fM‰‘Ö¼6 0Ù_«ër·Üvx"yf€6ùô¯Æ Œ¨?¡íPŒ`ï¾;J¼¦£ã³øç›«ýñ̓ŒuŽ0@œÝéZ”I´,âöæ€j¸lrá÷î´+0Œ¶ãðúW)µ©ÊUw·<ê÷:\7U’G~t´¯î²q³m¹o§½ôÄËî.ÉþU32 endstream endobj 494 0 obj << /Length 2218 /Filter /FlateDecode >> stream xÚÅXëoÛFÿž¿B÷Ìí¾—›"Ä9;—IÛX½;\š´DË„)É!¥¹¿þföÁ‡¼~ô ô`À"w‡³óüÍì°…?6³tf„ V³åæu«ízæ>¾}Á]„ùˆòtñâ»s¥fŒK-›-®Æ¬«Ù§ìÍuy»¯Úy.„ÈäËy.¥Ê.êíº©üÚžÜ×»­ùåP*Ø [ߺ}µéæ9³TÙŒ›ùçÅ/ν<Šóg Ž”÷$×|,9c)fº„ é…ÿx¬¡2DSGpQµ_ë%j¢T¶¬¶s^d^[xß_·»Ãúúö°'ó\Q›½»Šá‹Î)èŸëÎÿVíz7ϹÉVõò–4Ëîmøä®nÿT6n½ÄßÂÇ×îí«§w²Ou÷1A˜šª§'$B‹¨ß«¤‘¢)7—«ÉÀ¾šnf9g`fæ÷oé“6ÜWåê[ÞA„¸mw—åeÝÔ{§.J0Z¹÷Û`¾6P–þAfÔ¿·Õ—CÕí;ÿVoã§<Ø;¡Sî$ò’Á7¿Opnì}ÁqÑ ŽOå6ü¶mýÕE9¾™ýËuÙ…¯vþ×û¸Ûõ6ò '~Á„ ‚Ú”B‚izW!³Kø²È¼ÏŽÕ ‚ƒEORŒ ¤Žá!Å “I™HWnW)^`nU¨YŠ„k$X¢…6AtªŽÑ¾ÜïÚÎïî®ü†w;,tå&Ðvõ*LFi²w×þÚel.ˮŒ3zø´­ºC³!÷F¸°·Š\M2k*„`BÒ§rÓ «9Î΂XÅ=“gçgÏ>¼9»+ÇÄ@(Õôƒß(3Ir¢Uoæ·`®iv ¸šíš9Ë–s€›ëŒ(Àæ°ý¶ ®Ú°úw·Ê²UåwßWˆr¸‚®uK?†ó±ö&XÕÉ â‚ÎûL`|¨ö(3Õ®½éüj8‡eïËöÆmy¨s.ˆüÆ>€ÊSo;¬8Âdï¦V¯.¬ð ñág'i{µk7åÖ93ÙÙ×¹ÃØC¬N°vWï¯ý'ov€uôðv±¬«þÃ×··M½,s'XÄۆȪKyÒŸú¼s±òϺ©¾¡1Ã;³¶8ñát^«ÐË¡vj¢RA—hx̹"BØX·"€6ÝîeJ" A ¥2HTµM¹]/O¾t› sÿëí•ûÝÜ„P6PE$€ à*žjàTø!,h»zZd —]Ffg¨B º ÷üUv>·ü¾™ žš4LiN “!–…NãÓ9Úê°™ä,øy€{w¥¼x‘CÐït¨„¤R£RM„ –¸ LéX*Å£‡Æß¨¢©£%áÑë!9 M¸1G<åa@v}›G²=…¥Ì˜kKŒÕÓ ¡ ä&à Ë3¥1«ƒØaÒ¥í]Û˜J®2D÷AG1}FLoØ3OÂ(m(<¸Q°|Έzê!5Õ²PÅlD52úäĩѿ‡°OÖXIíÄrNÁu¨Ø¨^¯õýFÅíB@»^+÷6”DZ>¨Ý­¯"¬’³¾Äg‡4 =,Àœ~¼^BûÚO½ -)RNŽÕã]w‚͸ð݈w¯'i±ŸIΤ †›Á6\¥2j Ãõvö[ü¤ˆ™ïÛçGe–X1r ×IÅaZ5è…"šËiŒï R h"W&š]¹J¬,aœçêñ©œñãvùH~¢˜[íÕC:@ðQÞƒîulJ×vìœçw.«$upΨ …ÑÓ&ᦛùÒ [÷Ð7­*p•ÜFO•ÝËÔypñ Pé‰Õųô4ÏÒÓ<­§x¾žÅTOnŠ"¾ˆòÅ$ôŽtaŸÂÊŽàoÇ_úk/·…»« I—Å‹ï§Ït¶‚MèMˆ°ÅìΑnfLƒAÚÌ.^ü®ÇSж˜†À Z-fì#d‰2½KÿD·°l5€—+_šÉ—pbH’&tÄÔ±èW¸&ˆÉ‰~¹ Zc‡f³“«í„[NÁýîŽ'ãtâÆ“É•$’ö·ÛWI·#”P†nbÜ<î!6öÐÍ} M(óAXÈÇ\$ ÕSÇ.ºIG8åâ1Aÿ7ø±‹"•ihHQà}ŸP­¢#)½oSà6Ô –ìR¹âÐ(B„B }–'}÷áç_ 2ÜÕV?‚Íã»úOcÄçñ]+ͦÃñ¢–Äp°ØÔR)€ñÎ<p|º$#žôuÌC+S–m*w¯FåÇ­.´a&Æüq*hb†|yH`a!äÌÑu(Îe¢¾ÂùNsú‰ë7a»*—Xÿ®ã|gè*ÜxÇ•G“Åq#Âv[•ÍI² Urì¯×ÿú€/F}Eô&É!ˆ h's¤'ÇH£±L=*|ÔÁ ZöM€tjÖaô¸Æ{ÊOr•Çwy<&×ât,Mc˜yc@“'³¿UWå¡Ù';)=þhóÐb8ý•wG+ ±À?šnýôëâ™`qú”G1.ã ™zŠ‚Àú™·˜ÿ»‘š2‰ˆo¦†|ÜFá³kSì µGÿCN6CƒëçyØÆöó> stream xÚíZËr¹Ýû+8»fÅà ô$J•ìØS™ÅÌd¬©š*Û‹–Ø–ºÄ‡Ì‡ÿ}è(4IÛ²²Iy¡&Ľ¸ÏsÍ&ÿؤ #)¤\-žÑfu}=ñ¿ÿôŒ…}96æƒ/.žýõµRFIA 6¹ø0<êb6y›q;}ñóDØ‚XSà”fõã®ÚUõòÚ½{öꢠ8?Q·ó*FO˜$BjTÑV&¤*‰œæJóìbš³ì¦šæÂÈìÕz^.¯ó—î“Ê^O ‘­Ö‹©àÙn^:ýöo(4'‚ŠIÎáœù³ß¾žZ‘í–WÛzµÄQBd¯ëyõÞ}#…R^y{B0ÆË E71N”ê¶œAq®²ªÑõ*J‡Zi|Uòvÿ;ªhJ´$¼ßtäÚpcÚÏSgè®Û‹¤.8CTa)3æº ¦Ð“œ ÂT0ãËÕân·užQ&ÛÞLYž7Ûªœ}Î7Û²}{·^]–—õ¼ÞN¹Í>=ÄP³‚Ø¢»ï+¿‡!,Ha„u[,¡°rΈ:ö†Šod(› v ‰tî¼vþ7š6­‘â#9'šÚÈJáÖåÖ=é¬\ú•ÕÝ4ç&«ÂÇ.wšM›Ï0Í¿¹¯a²„R9G¨ÊÂĶNj…°³ºó]=ƒPXw[_•sÈ <ÛTëOn©Zož»›ÕËw”ÉeÝ8†²ìÞ½.·^C÷»òªjöš¬\¯ëOS¥2ËÖΟ •¹DÀ ƒˆ«´_„–}´}fõ§z¶kE8ë«ê°<†º¡”ÈÓ)y(bšµ›Ê嬩m¹°Šh®‚yýËŒ"ªu5óÅ`¾*g)¹ª Œ?ÈÈØ%ŒpÆûJÔž(ëlì;Ê»°»)7^¿rî¬%$¯ò+Gû7—;¤ãÆ•ÎÏS+3’Œ4F‘rÆe5Š€Ò‘xOv¸nn9«šhnýVn~LÉ(ಀç 1Â(v C }ÌÒº‡ÒÇ $cÿ…’ê‚Ç#µ]Î4( ×íF?öÑþwëÎýŸæÓ$”€æœ%";ŽÔ\¸ˆE°.AÇkø0`Ù-ÜM.¡@o\}æýɲhžLεßU]WëçIŸ34Á"U±Ù ¿hrbÞ(¹”2ûgõ¡ÜÍ·É¡M¿46G¤Ÿyç°d!q Ckׇ_ÿ¸8±’¼8昋v¢ y³Kf«¢PXŸH•˜“fóg™Ž¹Vd‰ñœ±`q¸ÂgµN‡4Zs²égé«2!Z£;êæj»ò|‰)—a¶¬—íÈíŠBÿ«rS…a—ÙºÚ ä~_Ïç‡å´“kØß¼˜ÏÓ] ÅÑA–œYx#€È7UÕ’›ÕÉJ¢ˆ•ÝÅ?n‹E8>f`s#‰–n(0Yè–†Uކ!0Û†ë«ÛÿûâtÊVÛõ‰™UkýT4ìƒô-Tîòë©\”c†z4Bå Ú†2Ë^yË5‹—óUÁM¼õ|!–O v9¥Êµ~Kλ¸~X¬.“Œmüë‹UóW·–Û Ow¶Ú'šhöaµö¦(ýçŽÀÅRCà6«áå€YÅkϯîrH8j¶£½"³#YBè3åÚoê.EcœØíûÃYу²Ý¦!{SϦâpÄœÌÇød¦÷ùdVdË•W¾á¹ÃZÄé†oyÜ…ã2ÔãöòC37‡Ëóà6cLƦd¶öXT+‚ṅÀk s1„g´&q é6šE½¨¼´]0e^ú÷ÎY~a»®«MøÒ*(XÁ¨›­ÿÐÛ;šöƒÅê?wMN®–­§Êùü³ß3«7!ò´!Rñˆï†´K¤û¬mR>E¶hP_ÛYzlfÃvrv«ÅS‹;ª<•t/XDÒÝUô¿C¥™s.uÃÌGóäXi‹9å#¥M—Ò¦OæÐ?´+–k<}V,=Dþ‡ÿ³+zê~„™Çœ††­&9€¼êQ:ÄÉpV|s‡¥èÈq,§&BÇÈ>@,ÏmeˆÂ ëЫ¶û¬ñ^¦éúzÑüŒÚ·‹†˜bî/GÕäI¾dס‡Sär!Ä!FN5lŒî/˜cê$΢iÆ5Ë€{B–¨ 'á‘ú üw›Ð]â(îýWö_ ÿÄÐh5š÷‰qA¨D6ÉUîSŒíϹ´¤ý¯£QU ác“À±Üð}(*÷ ãáÈss æ8hÉ"¾Oð~>dŸà{è -½ÆÆ™>Ç=eúp071|iI’V™æözJkÈ퉠v´–I{ÉÚ.‡î:o[aÚ¦·1=@â¡»¨ŽÄSCâUÿgïØyÀÞudéò›ìPú¦œ£u“;^>í÷3¨>2O„íéÀ|a3 endstream endobj 504 0 obj << /Length 2422 /Filter /FlateDecode >> stream xÚµYYoÛH~÷¯Ð¾Q€ÕÓ7Ùd$°³3‹d“ÈÁÉ-ÑaŠrHj ç×oU<”–œ ²0`‘ÍbuUuÕWٌ›:K… Ff³ÕöŒÚÕævæ.>¼>cžn„‹åË«³_.•š1J 5lvu3fuµž}J^mòû®hæ !D"ŸÍRªdYÖ·UáÖ–]Þ•»ÚݼßûúGmWlÛù‚ªLÂÍüóÕïgW½<Šóï)¿•<KÎXF²™Î$aB:áÿóñêÝÇ«%nûË¥æcj03$¥ÌQ¾t4S[¨”h ´W¯ï_s¥’¼Úž«˜¼A‰¦ý;ï £3ML*2¤H ¥ö&ZhGuÛZ›¨þ¤ŠÆv”„K6|ñ+ØZ§ÉÖþꤎ±È[…W€/óTfLµ` ½„µ‰™^Äf„e,ð;1ÓDë4Plc<')ïIvMLU&ˆÐ2ÐDuƒK–õ$«Ü»åõ|Á³¤?@ž&ŪÛ5í¹[Éëµ»(-½LºMÙº•UÞžªs “¦h÷Uç ʪ:½‰ß#ÐÛUE¼ø^(F`óŒ(æxYxžyÕîžEE‘ ÂÂk]4U^ß^{©ÝÝÊo—ê“DHˆÜ.•DË nˆÔ~;Xš/”æÉøP²)‚óñ›´K£Ü÷k( Þ•¡j Ú¾’™-´¯“¯ %¥ÅÏtŒŸÂã§»F°;„ÌðèßkšÒ7e+ŠY®BušwEKz:8*[r˜ùúqYÒëåÖF©Nî›Ýu~ ñйR!–w$´8|;Á"Mø Ë&MÎ]¼q0&796sZ¡Øn¼Pyõ°JeÑ»Âݱn€õ2 AØÀ–úÀ½ëbO/ZÔ0p;£øÁ^S煜DzÁ,\érøÐ*QD”LÛ6Å:˜erŠU“®bå€kZŠgñÊd¦P!(®Ÿ<(óôA¥ÄÃÕs—é!bu6 Yìï¿ô;Ïd9“ÔÀalÝ?}¦³5<ÿ$ÎÿÁ’nÌ,žW³åÙ{×à`Šç% t¤™9!¯&”÷Çõ¯·ŒFƒX)gœ‘úÒpd¨qÐúrN‰DÔ€žg(ö•ßÞ>5¿á‘jãèç…ƒPí!Ô¥ ¦iM3²‡&&Û胩 dï@÷O F¤RÓž%²%Žp”Õ0äÿPWn9dÑ+&+&ë«©BVXùƒ œ-“²oäûYÒ÷ç>>9œÃæ¢É!áëtM"ExØìŠº ¹ –3kŒua ÛÞ%Ô QÅÀ?æ¹S#dÝü MUš¼Ýar-ÜÎ.µá†®„À5÷›&ë$ðœÐîá ¼Ûì¶áíÂw” 6bÛ¤6<(aqÊ´)CŒ>PÖ“–ðƒ ÛpÆJ€RòÿÜ]®¼ÂEãkªI‰tÐb~-š]<\¸ÊƒÞh.þV´¬|åJÂÃ@¸ ¾½å:Þûý“04i2z¤6…¶´Ìè¸v;W»œ°ÐÂp.>>~¤÷ï |p‰C ûëÊàÂ'Ò{|L±A´¾ŸŽö8)A™tbÜ?žÔ»–ÊöSØÃá„›á‘ïbR± 5i¤Wƒ£\ð<ÆÅŒGÙÇ“×4«·7 ª°©¥îé“1àû€®Ï‚‡ €Ÿ†ç]MF7@ê]ˆ™ÞE'“ôâ°9úæKC@=àƒA†Xˆ[Ú*ûÚ[¡kìB‡™åM£¸÷–°…”Ò µ7Þ¸˜õ}\ÀØÄ_«"^´ù6\•_ L†%¿ÕªôïùO 2͆WûO xã>)Œ°ÐŸAó ³idN„²Ýïð™!;ú™!ô…+/./>\¼}u±Œ¡:4i¶5’é‘öFåÀk°×4y‰mæ'­+ÙÍ9HT²ô_7EYÛ*®þË®âlÚ=}S âŠívqéßþE—ôKg‚uýðÄ… ´?Ùáó$2x[t(5Õ®¹kݪ߇%oòæÎ>r7 ÷ü&Ó¤M^Öí3—Êßììøg]TnÂË2ߦÃÅ;‡úÐßoóÚ¦–&á{bøŠ knŒ¯øIUãî–«²è_|q_•«|ldÕÆNˆ BÍè[õ•ÿ–UñˆÆô÷ ºòsçNKWÀÀÑ s[Md´È× èE´ùÁoW8‚dçøëþß‘ÐjýyÙkj endstream endobj 508 0 obj << /Length 2381 /Filter /FlateDecode >> stream xÚµÛŽÛ¸õ}¾Â6:æòNjY -š" ¶mX ̓ƣ™QW²'’¼³Ù¯ï9$u¡MÙ“4‹F4utxî7²…?¶ÈèÂA2iÛúŠºÝæ~áoÿ~ÅÜ×È¿l®¾{©Ô‚Q’ÑŒ-6wST›ÛŇ¥ «›,„͈5`q»ŸÅ¡(w÷øîêo›áÅù3)AÈRŒ^0I„Ô<¢­$LH¨$fµVš/7«5[>xøw/åÓ4#š›žÎŸàº|±RrXºâƒ$#Öòþ–Äk °¾xÂÂVö0ï>·]Q{¸XÂk&4É´€EFr~µ[­çËܯ'ŸpN¤QS¦2¥†eâÁ‰úˆ©­"R©c¦b,@"e=È(“»²+<¥Ûü1ß–ÝŠÛåg¿ÓzžÝº{X±eŠjü7˶gÒÃUáU[4¿"ª¢¹Æ ¹Ìw·=¦¢q@ Ž RºY­6`ëüÛzßv)6…äDŒ¶›äs-9#ìvSò¿û$X >w=»ð£+k¤@KŒ¢ån[nK`ÜÂíáðøÅöÐ4…CÑUI¹óOä¿Ü€‰]'MÀ(0;2±Y¶ü1Å ¢6ƒ!2‚6"—¯î þ±+žü¢)À™ÛÀ_×”E`¹Û;Ç_ %y ë%ƒtóŒz&¹ÍåãæÓC1¾Fåá2od^5E~û9Å%³špcΪ èàt0ì=žàœ´×øÓÊÆ}ÿM‰¨ö-gúIA—›Þ7¿|Èۙ๑VÄB ÔjQ n¨õèA”&yb„Q5:+h€.Ûjßµ¨=®q B4',³ÓÀ 10è‹Á\ òb`bˆ ƒçk/a¡¨ù -=wÓ–œÌózå‚:»6 ¢û¼¹u»$€ïïü3xÚPSþŠ/¯Â†‹ˆÙû·Y&‘@g¤ž&ï §Ëf 7AA}à*T…ôòáåÊŠåa·íÊ=:¥Ë—eU| ÜkTDë×=†Àÿ‡ E>BS4ÿ>…&2öë0¥†cÞÎ!Ñ_€äÍ·@òó·@òHSXb˜ç y}ÍGt#áŸÚºf¿Ì4r(K8³£»*š:_.ÔU^ß܆´­²)˜0D+{–V4ˆ¬>¤°¼wðP¯¸q‰Ü,1‚ã‹ý]”“úäë}ð>4ûÃýÃ#ĉCHXwûÆy4iNVQ±¸úŠXù-Š(iRU GUìøXê²¶ñe!l&ÂBRR>Ã’ü£ÃÿÈRȘ¡èiÂÒ'é+9V{¸ª½|Äæp+•_>ê (ìòßÊ:ØŒÛ Èö•`ã_8‚çÄ€à—«±à9 Ò¬'µ›+ÜF¸¾rðu‚Û§ ·½O[b™, p©ÏW¤°¤rM]Bò® äP^ãúHiøB¨1´ŠS‚ŒEmý*A%9dX·LÌJN` av0Î?Í*ðCÃQ7ð;ûäÜ55KÍ4OG“óËîN£^À?t zÌŠq`(Xƒ£â«þûýæÝXààY&BðDÉ" ëþ³o–´o– Ö4!ÈŠ£ÂvÏÀdÆéYtŒŽG*ª¯îǹžvR¡SÔ‘k¦Aã ž5§De樞åî]hø?Í>f9“'U¶>¡V~#ޤ$ÊYç„£×—úé8ï°@>­rB™,¢2STUíöÉ$gÓÌy+à ½êlEMõΔi^ÙLàä6!Ñ#o’cyìÿz¿¹ä/,n¾ŸgLÛÂI¾ëÅ}ÔóÀÎÓC¹E)?xá–!§ß®¶ïe?ÌŽbáBt š%æ3Ò}á±±u%vìW}C3;E,Îì¦øöÿÂq›'Âü3eÿitö›‹±*êA¦3%þœñ—»¡d‹ìüy6žf|hú¶ôÐ=SôâyGe±8)‹ƒWŸ”ªÂÏY÷§’šÏ$ýõ—‘.¥9%7=é~åHÇåL•Í2ˆ§âB)*IƇêjdÑ"Ëá$¿èƒ ®]ÿG rÚ -DŸ¸ˆÙKoF{÷¿;TÕd´’¥D'ñѺÓÙ\(×HÆ£Ÿ1äN6@øô1S’ŒwSØE&PqJ_œ½K6¨Ú_Çh=¹ŽÞ“·Ý¾iý†Ÿêè~Š«—m^÷«ò÷'’‡IB•á»mÞú1’?…0t¨ºðTV82ŽipZ„"™Zwâ1]˜0ƒÞ|¬ªdê¡îšNSÖ‚Þ˪vÿ}JDCï‘ݤñÿ—»;÷¬Iêòpm$ÑXB­J³áÂÓâ…§§ÿ_xÙY§o*M6(ž»©„´ë1¼¨ÌÆÖ}抒šùéZž#it™‰“ F1¹`á.G0e]Vyã7»}x¦‰dV‘lt—?è"5Ù«2zÕ'÷%@kñÛ¶xìzº}¤a= ¼á$VdQ@J'Gi½«ÁÓÏ¥p°Úúôì'Ë CTcôHŽ/”±Ó_ñÐh9¼ÉfQBï=­êfç flôê™þÜó,Dò xág³0„&úy,g.ü,#™Ð—fdjJëL‹ î=Ðz&ÆŠqVß_ö§¬~æ°ÆùeÚû0¶Â·Gò4·ÉÓË<Ì]~S¤ŸQüêï@û endstream endobj 513 0 obj << /Length 2804 /Filter /FlateDecode >> stream xÚ­Z[sÛº~ϯÐi_è9Š;‰´>39™$M=I“Ø™f&É-ÑJtH)>9¿¾»x ]Üx<#“àr±XìåÛل›:I… Ff“Ùòµ£ÍõÄ]¼ùˆyº)NG”¿_<úÛ ¥&ŒC ›\\Y]Ì'Ÿ’g‹üf]4'S!D"ŸœL¥TÉy¹º® 7v¾Î×e½r7ï6Ŧ€‡þÑv],Û“)3T™D°“/ÿzôü¢—Gq~¤àHy@r©8TLt& Ò‰ÿéÅI&’Íj6Èø¢¬Š/( 0ÐƈQŠ#ƒ©ÐŽõï:"ÍÇDšðTwbl"í(Çx0N”ê§y¿‹‰¾“wÁäãC0¹¡1.!Í1lγùrv¡’S÷ï[»\.¿zÎtl:#œeÝ[Ÿ©¢±ù%á²g]åËËyîE0c2‘­²½+IÁŠz•-71.Gè#äcrxkgQÝŒ­TÃüDkM¹L‰2z2e‚0å#C½¼Ù¬! ðL&›uY•ÚHðFŒL𢽫4©W­'Z—K¸b‰¥I~O¿Ÿð,)šüÚÓ¬ð~³ÄßKI0öàƒúÊýoŠo›¢]·î._Í=ïESo®7›–¬ÝÐUí_õû¨ÅxMÔ/†¹Õ¼#’`JJw—ËÓ³˜.4%r°“Ï”ÉUiµ h2ËoòY¹Fḑֆ@\4ÐÉtòjåDeb‚Æû Û’I€LÈ鹺yqªõ¢h¼€9\DæM Q©Ù²5-Ñ8ÑÔ Ëæ*&˜žûðTÌMZÎ »«ër–WøDZ%I „Á´Eó½œaZai2óïM‹:iyã2 Ü䎵ÿG1Ÿ†zG‚o˜ˆPåÂ$O-#÷F¾¡=‚- ŠY»¡eé ¨#Z\Cú‘ÛîªI:øä ¦­}Ô´Œjõ»ÙÛ¼Sž–Di8ã,Çìf˜uš4)ÜMéÁð¢3GX³¤ žÎªÍÜéÔÕ­'óž×?±~:•jPÓÅÂϰÌÿ(—Þeí€U¼»¬ŠÕõzá8–í>x¶Ãðä(@QU¨½Ü«P4ñ>l£eH Ë(ѺÄŠ"\+Ië¢u·6È U[WNþÓ+<ØKlpk*¸úá1Lž]¼~Fü¾qˆË),Y‘L;9œlK>ÿ1mLy–7M}™_BTõf fœ³>Sá£7£×M*2á!ùMÑ"u„_cúɈ]ªõÂ:…[fã¥Ú@´!©êwék\ÿZõ;ôßúҫК¨*Å`¢xC£AùÈÁäNÓ[ò„\ ¡JÅGmyü–£RB¥²°[Uû$ƳLN¦RÁ®Ü6ã¶MïQkJŒà“Õ©çe`…FC2–ñK ë3k“à€PùWëÆÀP3³{ìÝÃÙÅý^~²CÏ™6ëÐY¯Q‹"°P(3R ÖßúbKcã£J9a «…O_èdÏ@"L6¹µ”K”@I4¦jrþè+*BÁ Á†M”Ù³šPÞ›Ó/±5JXl—ÌÄö¾Ë¸·ú]¡Ñé´5ðYyµÏe2˜WÝÏÚÊkGã¿G}…II´ÕÀwÍZ›ÅrYHM¤ÎöÚ… œf{í˜eÈLÀ†©ìØ•þqNM€ ÎHªÓ^¯|G–“ åÖMe¨­¥¦fô1KíÄÛ½ÒŽWd¥a¡$Mï,DDv ª¨Ï!(P-[ƒi*I$wÿväé6n¡úE†u Êð;ÈÝ"5[~ݪA*dÄLû/êT0PÈigñ: ±á6x 8Ôš[›¾c€¶*ÕÅkmðPBžî íq„yOáGÇxqn]Ù“Zð¥”ÏýPêÔè…CQœš»'U#öTÔx̤ŽCH)xò]|$÷Â#‡G`²wÑÑXú®æÂÁniÅò¦/KàaºÅ‚\spâ_»›r uåõÜÝ]z&îɪ…šÊUC’C³m¡8x“W•#ÔS"^Å!‡ÔÛµ»k³ãźv¯Ö«âIı…€Åg˜»RêýÿmÄ1™‚}‚[KÍGFŠùp‚ÉW—»<ý4ð+Ø(MñcÑ®ÞFél‚Z‘%ì±Çêx›·çvQÎP _$”ß±QÄ¡žA`d* ã sÈÍáÈ|Œ9è.ã÷ÿ%¢$úØO…2²#±€>€Æìö1Âk øjQûR¦{·XØbPõ„Û¹W®A@ ²3>‘ ¨•üI õ¶€êFh‡ªñäA®Ç\gÔöýºÃ¼E2q?ôƒ9 HQÇ,ý0Ì1RS.ýx˜„@¬@Ê‘¡rØ££ò°ÕA)•ïýÌ..Ûn²ÊªPÝW­¿²¸ËHP[Qñ@ð ð xÎ;íùJšôGû£¼¨ÑXFãéÞÿÔtþt0󧃶ˌ§ƒ¦fái÷î ;>VDˆëàÎbd¬H^®‚ו>N3J3ýAæú¸ÙnèÁé¶ÎÄÊÙwàïôû…í÷;Öwõ´³{OŽÜÇ›³ûÉ.UDv©¸—{Ùñ²?«ÀSó‘»B@Îä¦~I‡5#[\³›ÓÏÓÕýx±¦$ñe$§ÆBìqxŠ(_ôÊ—®˜÷Jï; öH¡;©ª*Œ $¶¶ˆŽ. V‡'BÙ"7ü d à]dCˆCgÚ¡·LšûpŠ1áõy<|‹°œJ™ÏvðéEqç£ÌŒÎGá¦(Ñ\Üu;Ë«¼iíy0Kj?êâÈl]»chãâ˼Åã{ù²»*ÿ쎜_ùÙÖî€ègyë¿}°†ÁÀ0”‘aôNÁqSu¡è¶¬*7Ü·‡ð& Oæ¼KºüZU$–b¨?}ô¶ñþù‹çyöü<–ü2b,Ž+?S–îд@ØKP×4ù×[ãqè #ܳzª’sÿøeù»hüè?í(Kæ…{úº°pFÜ'0tæ_¼ÀOºDÛ_F­Œ :FûÃwiÈàM±F¬¦êækëFý< NóÕ>ŸïÞ‘=¿ !ôl‘—«¿‰iòº¶–5/*ÿ•BæÏáâ­ËFWu³ÌWÝÏ¡ P‹6Ý÷s0v[ÚsxÅ]Ó¸»óYYô/>½¹©ÊY>   YµÑΫ xSþ§¬Š¨MÏŒÉ;s:/FçáPlG žÐÀ%„9ðXÑ%·.uTmý$& T¢™ìC~¶Åão¹º²ÿ]úÀ’ø?»¤v endstream endobj 517 0 obj << /Length 2304 /Filter /FlateDecode >> stream xÚíYYsÜ6~÷¯˜GN•ˆ'ÉTœ*'‘¯×^G'®²ý@ÍP–yÈ$ÇŽòë·Œ0Ò8»®}ÙÒÀ8ºî¯ÑEt‘F‹˜s’Šd±®žDz¶½Y˜ÁÅùj÷…°1œíüiõä»3)4"i”ÒÅêzNjµY¼ 8[~XýcÁ“”$q Tôì§]¾Ë‹úמœ®F’±#%Á÷D‰Õ‚ Â…bV•B¹0LI—¡T,X-ClóeÈc<ÃnIƒ;TUÞ·ÅåúîŒFlNJF%‡;¼bQðt)Å0¬Ì1W ™)Æ‹_Þu}n÷¹Š eDP±iJ(³ê[¡˜BðàYwWU(áL>ÅçÇÒ¹t¥SzÈGé\®"&‘dáÎH E°nê%K‚>+êÎËŽ'½ÄA ‚Žúêòö3RÌÛnäPçë>ߘö™ÎÌgæQÚËks!Ë0ŽeðKqj“ KHªP'ÀF3¹ÎÛÜÈ]ÞáY\·MeF=èÒw‘˜¤‰úz›ÌÙèíØ€AõÄN2|ºƒÏæI$£ÿÿ<[㷆ߤhó]eKZ2Øê³nÅ3ÚäTÖm´I áMñ>¢|Ô)x š~±F÷áðjE/£]\1Â#ŽïBTjßãÝÙ2áÁ®^÷Ø“>qV”ù{'ðJR)µ§„{«wV]l¾IõÆGwÄÃŽ p4)G6‡ˆ¨¯ òÛƒÈÛG‰|“`ÌCÿ|겪²æ¡¢¹y¨„0:šÇûHF>î‚01zp™UW›ÌJηñ˜(™>xÞm²ÚùDr¯ "Q/ Ò8Ò¢;føsSÝîzë½2Ùs9¾vv{Û.% š?‹*÷; ÀÄ”Ã]_”Å_'x/WqÐæÝí2coêM\Qmâv5C7øŒ”·Ù^‚¿wA*\Áé}‹­Yo® 6ëúÎÌ"Là,x“Å3Jñê{h=EAVoÌ ß¶Íîf 1ß× 2¢)ì°;œ4""‰Ž88’Ä‘tâ7Aüˆ‚çõ VÑÙjé묄 ¯u¿C„1X,”s^)s ¾ñ= ciê#–&ó`„ëŒp:³Ûm0©ñî€e§#ðºDÍÎmÖ™…¢·\\þR›YtKkk]W\AÀ2@«qX{€©œc±Z°yý(IðüÚLë¡~8R5ÃL¿Õ£¦Î'zÃpÁ¼”AV”ÙU©YM¶ §²"&ªï¹7@…"úgƒ¨õ¦©Ê»Ðè¯ér@bß4ž¿)’SD yÑóW¯ß¬.'(r7BÊ…É×=Xs¬D¬EcÜ}Ö¶Ågt‚¬œ”iDrás%œÄ,öâ§šïƒÏÕˆ|?F^“¥DHy]Ž ‚˜P¡ôMF¼ ãѼ.{•BŠ7'‡Ð—QpòQ%h0ÚD†ÎŒ g~p„¾=,[Ûñæ9 :ˆ<÷ñ…Î ¸˜Eˆ=˜©þ}Ä„—%ƒÌnŸ£Kâ¤:ŠLü â€ÁMÙ¸ Jb›º£^†¬tU¡‚v]oV†Xa1Pî``ÞÞ4!6€å£`Ú×7ÆQ?‚Ý®:D“3È=Ø~Xwé2Ü=_sŸKR¯‡rq)׃ÿõfu¤¯¿9ÂÍ!CÐ l3£­i0aéÚB­Bîf >#I áé~fºïäJúê%C‰¤3u2ùô¥Ä—ßÁ\ 5Øô˜Þ§D(^e-$•i –€”"`ˆ‡¤@Q×S¸û„”Ëå£pÊCPcKtu(8³]3«Ø=·åLº wñ ßr@Üt«½Óæ.!ô hÙùb· øZùL2©aâÊ$PV(Aiá¦ÈkŠM]†m‡ûÍ GˆùöïªÙè†ÉÀÈI‰©âŸ_;‚‰)óƒÉÂJoá-Fx;ñḚ́©²xëC ¢«Øw*¶¿ƒ{¡Ñ…O¹pAåâôìôâôÕϧ—þø‘êpŒ©I:2d¥jBÊsЃ2০\ã“oOP2¸´óçm^ÔykgÕ³4Øäfõe®sL˜ÑUN½°WXpc.ƒ¶³)N¦Šn¦VÈ1Ùø~ºqšÀ«¼G¾ ¦ýØ™Yˇ/³ö£^2™¡ ]†ž[´m±uô=Fñ8xiß9/5N[ÏÀàµI Œ©²Zû$ƒS“t–»Ìv`îKÑoÍ[¶æër]äãA0ײXg¡“„Ú(uÞ¼‡M‰éE™ß¡2í7MÓÄk6B…µ dORZV—¹u”¬ìšïTÉÔüÔA%O|ýÃ0ò"ò©FAÛʤ‘íeM­½f%d}*U{½Êó§>ð€[±°@;<بd4Ž0Iøÿû<ߤÏs‘ÛÈGÅݳß.ªn¨·[ç§FÐCÝ"~d·(9¾[ôgöùÆG¬‹Fê+è°z㻜¦óh‚ &”Øþ¾Äa±×+b©zECŽ€›tŽaQïÀjwl¶š~îÑÉÆ~ˆÇ ñø;…xü2È‹´‡ ÉKo¦tëGoò¥l.úÙîι7¡Ä¦Ãd7º¹ iÀ .¹)i8Àù¬í ìqzSt}[\íP6Òà ȬÓ­aƒ){6féJw‹ìöÞî¯ò¬öE.Žc93…n¼8c¨Ç6èL\MÇ+yNÝ·7¢jvùºÑ§`\5U®3´Þ'\ŠaDÞ7È{Á†OÝ)Ôl*­fÃZ›\fB•ž1Í\e]nåÐê…_°À]9jþÓÁ% þIÌÌ‹ÂzkB¯Î2>zÓÚüÅQf&X˜›pà ž ›Ãàù;Ž›Ò|0ÛD‚'†”ÆŒuДe¶þ+ÿ¾Øµé µ ¤˜èܸÌüÅ£•ãÑ&z4ÛNîaÝC<æ€áý‡ËÑéý!t^ägî”N£qðxîz¼ïUfR}›Šþr®œµ•ÝSµÿjþ7Ëa‰A endstream endobj 522 0 obj << /Length 1745 /Filter /FlateDecode >> stream xÚíXYoÜ6~÷¯Ð£Ȳ¼.M›m“xHó ¯eKÆ^]qm'¿¾C‘Ò’®6…¯Žáœ¿ŠþHap¡C†ëb¾<ÁýÓíUá/ÞÿrB‚ܧ‘äËÙɯ…(FRÌ.cU³‹âSùª©6¶ÞN¦Œ±’?ŸL9åY»ºZÔþÙ™­l»^ù›w»zWÃËðêKgëe7™ƒ…)›|žývòólôGPúHÇä7žK{NˆFºš#¸wþ½3x¡PH‚Ò^à¬ÞÞ´óɼ^M¨*Çh·u·™L©.׫.ˆØvY{©íi¯âD„†Ä½{Èö‹› è®·ÕU¯œ—+w¿[ºÿç½ÝÁ‘õåàÐß»º³oCÎmœëút?Ò½ÿ)5¶Ù®wWÍfginƒ²÷v»>¯ÎÛEk]¾ v*룵̈́”à ,øwmçWë R­¢•!WþfPgH˜c.ïТŠJqQåügA†žå+„ñ(qW97W9]”‚é'è²tu‘Õ#cŸæ•C‰åo<òæv½íüƒaB,Áƒ®ZWí×M¦‚èòMÐe›6¬›W]ý .%ß/…m³[Ø pÛ.{TÙïà!…8oÎzOSŸ\9C}oû‹ Ѫ8Zà3Øö„Ñ´Õ¢[?Ï¥‡ ¤BBzþî– Š•,GŒ– G!kH› ¨…@*$-g‰Mà‚i¼T$͈ëßa.OD ‰Œbº‡…K 7¨¼–Y ©ŠHì4ç2ÀƒòÁ,øÉ”œÅ ds¨céW}z=Ѭܭæ{JÝ.êÏA˜#Èá3Ä$E ³Áâ§=ì…$¢jLŇœ'¡`Ÿê  1šyL‰|‚’wßCÉÇï¡d$Fy\æ3@ˆ (zÿÓc6(ÆqE%¬çtXô8gž#ÊGÍÀqç#µ™XŒ }o ª?†ºÜå´¤q<¬¥Zlš*#ˆé86’Ãô”R…S ±¼Z/¡OÕŽÿx¹³Ða¾ö ð5|èò*ty'ÔwyØß½p‰k}q³v2Ùfí^8*u¿ûfíî* k¯{èœÐάt¹K‡ÈÙ!ñžÒG:áy:, H#ÉdÂ&©BG&ºˆ¤N³­q‘É8` ?¾Ç¡û×Ϧ’ù®³ëå08tñTáòÖ6Q’Ó¾™oBn§õÝ0‹Õ}êm[-|/a)BÓ,]´Ý¶ç;Wçç¹$ ¸Ó@ïn¤¤a\|™KÐ?ÍmªD]²©îrj€Oð ˜ÓCîÓ:RĹq{Gš´+˜Â #©ôô‹¤ì›‡Ñ&!¤D†íÉ¡QÄ®½;)ø”dóEÅÊí[† ËtW) ¯³}£bºÔ¦ùiWã|AÝå 54f9íãH`~¨ê `‘½9*ƒ …µFæ½×œS°iÒ ÓþŽ”s|/t—ßiüœ&Ž r ec"~†"RN’*ÊΧ 6’8öû…BŸ@ÓS?F“·M½­s6AhŸÖ‡K®î)¹FLyâ R=qè+€7@ŠÑ1@õü{Ñx¾×á(ë»ôr៫ ©tÙè¨0ˆ+1Äw¯!Ñ€2eFú³(¾mÚ¹3Øø[7{Ol&]ðÅ̤ôäì d;4–ˆ!©¦å¶²á BÌ¢ÆY™kZ¡ØãvdÒÑC ^\ZßÛh9wÞB;]Ô2@Ê«ŒË•õ¿GsN¤Fœè'åœ:´IZvÞ‹¬r8öp=åîV4‚•¯çà©LkWßµ¶Kzã‘ œÈXàÞ7¼ý0;Ëšñ7§Ïóü¡3ù†°Ý¶7!apòžô€yÜ‘&6¨/ÃûÑM& Ë ,⎅¯]аÄ~¹ÍÈM8r#Ž#A Ä ¿·Xp¹?ÌŽ8sZ]¤€P –ìÚºD8ëÙùÌɸùÌ ô^e7…rÃÙfœl³~A/P4 9“A(ˆFT¦Óè¢^]Ù&Î#øâˆmóuÌ…xhÐzÆ „²ˆ ƒV4…À¡Gã© Ú 3òqÐ àˆI AÂgw±9üèãß:<Ù?¹ÞÝ :b®w÷Ux×3˜«žÀõ(÷ .%¡™óÊÁI„AVÅÈû’&»ð1ªIº@Ê'þë‹›—Û¯õø9$çôg&Ù«ÎÂÀjnCSéé ƒ9@ÄŸfQ–N÷ÿî“bt2{$ýÿu÷è·Ëïùu×}°ÿÊàÝœ endstream endobj 528 0 obj << /Length 49 /Filter /FlateDecode >> stream xÚ3T0BCKscc=K …ä\.°hQº„äÎeUgbl¤±*OS endstream endobj 532 0 obj << /Length 2917 /Filter /FlateDecode >> stream xÚµZ[oܺ~ϯðãðªEêr‚>¤A]¤=HË[Od-mëD+mDm÷×wn¤¤µ6ÐSÈ’ÃÛÌp.ßPN.bø—\”ñEž¦Q©‹‹zÿ*&êpÁ{•ȼ-LÜÎfþåó«?]s‘ÄQ—ÉÅç» “$6ý¬Ï»‹mRsùïÏõ×Ïa'£ÔO‰3Ÿ™gI©Äh<¸Ê %©æãÌåÖdjóár›lŽöh›îþr›æzó)v¼LÕæñ2M6ýðÅ!g¼¡ŽR)ܤL³¨4²]”ð†ï:\4=ì–lvÇzlúw6›±çßïeÃ¥V`äŒ%úø¸RE¾y©8R9sDÔßbxÿ'ܯ‹bSqß5ûCk¹½ïñw³³mØ´ëÇŠÙÃÞøP¼º®„tKKdƒ£³;™ÙË)]Õ>ýÇï‹`òŠF²¤Qb–åKÓí€å4+6ýÿº'7Ú½‹@kºD­µesîFîÝõÃþ •—£dHùð^Èü}µ³Ø*ñRn–Ε«ò4ÒeŒCÿX»¸Ü8Küg‡oMmyûÚv¨ùÑî5P Ô)kÇ%1ÜdŽû²z\Åiá§“±gsgQÀ¯ÞÏWüæ@þ×·MzV-³Ñ}„Î#×ï®Ñ,ÿ‰ûD<ãÍš$4ó™C§îÑ¡Fëdé¤ÀQÐKËîŽ$Tt؆/‘ûU·ã£(L En‡ÆzÔ÷š,ÞxÓþêýÞŒL¹ú=·øXäÑVà™¥Ö°Ÿ'æí>áL1sFÇ„GºôUÇÌ" VósN‘ýÀ)ЦÏ&ýYŽÓ‹ã’¨ä´äLÔ)í§9‘Hà\`J¼ ˜/Ðe”™7 žWhE¼©/ d®Ž´°rP–E&Þk[Ã}ei˜Ót¿Å‰îšÑòþhgöÎ!¡›Ò/D_O ê]¶‘kÁ<ÀÞ›7ŽçÑ2XÀ,Ö^›Äth'°Žª}Ä'«}rbV˜Î3Ï‹ †,ûºž8ó!åë ×ÙÉðaz08F«ú8\&‡Í³:Å ÜK|„N³³Ã¸9 4¥òê%%¡§xæW¼4|@€€ÜÕO«7¥"‡Ääq¬QårªûEVæó• |)))Š”7¸F½½þ´v”É£pÐu3¸qû‚ý–›Ÿ¦p¹v­¥ƒ”¨óW8e{óñ¥ƒ~­Îsź½¬ÝÆ&Ä:ø£uǽ}‘øæEYo†ZµuŽC]ºùôP äBÖw/žñnÿž Œ5NsX:ÕPbÐuàqºXQ(Î…â„FHwQ•ßyqIšÌgš$"éMXÅÎ+8<Ë$8Ð’‹ç¯Êõú0ËY†Ë¼ac£4h<,!P*þq°¸RàŸ–¶•s§ñdiò*Í£<œ°“)ÃbhOèÈÒbÀ5 W"Š­º —ÏÑMC0„†\fÔÂ~‡8/Éõs—¤ð<(Ç›Ž Y²P$¸j/­¼` z«’¼OœwÖÝÙÍfšª{!Žî… [ù4Œ½C5@9V¶ §'0#à_VîÈ€­Làlldž^Ò2 ·Tên)‰!sèÊ=$Ë•@Ö<…lüL»ÃÐdM¹ÅõG¡XÖ‚ L|lÆžÅ/@êÉC;¦ðö¶’2›±^ªc] üWjY&i¿; ìpåXçz‰³:)‘[!l‡]ÊßçæØ@¡súÛê#oÛŒ%lHlBÑ]'€•ŠtsPuû~°W‹kõ›Óùíã hsæ…ÓŽ{†ŒÅÏõdô„Y§LBÐŽj7œ-ÑçðETMçq´ñY‰ˆ z\h)š7=• ô¶¢äzÞ`õŸÎMšú"6ñPüŇü‰zµškŒš"Øãa àK|¬Ç-¾­A€)tˆW§yì%“"Ãä:ðDl#¢¦ÇB¼@ã}qÝ zØ¢ Ôgù2*yD8±&õÅiBEß[Ì7å–ú¾ëÛ–"Ô  ½#bÙ¾ó} ¿ ¸ ³H°s¾êÞ ŠÊ ÍÏþLâ0.,-ÅG(×8` Ëù‘Õ‘Íì|Qtë(6DkBl…·ÿA Q]Žªƒëí-‹½]ãjˆ\MgÅ 8®Q­)zç:âôf*)¡n|Ã×)¼7{÷é/<¨Œãf½,Æ×R¦…âŒzGŽû®é zÓS/ì`¿ \ìü³ã1œz‡æöHX'Óíâ]âJ|{˜ò.)@€]´–Ȧ‡ð§åC¸E`õæsõæZ ¨P0¡óQC–³©ÂÀ ø¡µ’Üq=L™L(Ž_%û‰;Î Ø%lׄaÍ0*Œ}âÁVÅ?AƪŞZõÐbb«%ŽâŒq¨:‡!’FfrI0k–7¶ò Ý2îrƒ¨ÚÑk‡Î$tk)'ORͤª+ï§)s;æÒ½C߇ÀË©`p'âaÝÏž2e`É$ÿ§HPÎO*ñ6¤Å’•滜yö‚çp—ß ¶Ñó7.›"D.Á­d½p“=B0"/•9ž/ÒÆ‘\R—î?VÄãÜ2¥ÇçR±3a?˜ RÙKv&$ á.ãÚ2tˆÖ!ŽsØ™N™'{$ÿŽ|Ýr[?5«nMžªuòv¢¼T”7{H;£ü1‚#ÔR ¤ÄoCóíÒ`}ÄÓÃìÁÒŠó6žå5‚4òÕ¥”J†—ÐÞÙÉÞüÄŔƭÝâ ‰Ò8×wWüÑÀcñô„a%¦´öf¯ÒÈ”³ Q™õ¯TE9«Oè2üËWŠS;‚‘^äK‡>cGJ’‚J½)Í@}±öÙãƒÖŠbX¡\º¤ø2]ÄaÞAŸê'JÖp"×úÌ—ÎDëHåá¡ðíkL§g/Ÿ±I5S\†óf×ÇG. €lµö¥Ñ©ÊxöVeQ¦Š—™ !"Wû% &9©‚ûãP?lÎ5÷™þ1ý KIšDjú"tŽ%5}£™ê¥×ˆà–}ÈXj(MC’ÑSV X ;m_ @ÜùçLOá2ƒhÅ…Z>¯”Ülå…KÉßàp5Ψ§Gp”º±®ŽN(n´ÕîiëF׉™ xPÕÕBÝÛÊ+‡ø€¾ …àì¢[ˆ–Y݈”œL5}©Dtù¿ù/éÓ¾ endstream endobj 535 0 obj << /Length 3058 /Filter /FlateDecode >> stream xÚ­ZY“Û6~÷¯˜GMÕKÜd\~ØM%)ïVâÄžÝrmœZâXt$ÒKRžL~ývã  Ñ×T@œF_7@¯2ø£WEv¥9'…ȯ6‡g™©í>\ÙÂëžQ×o ×AÏÜ>ûÛ÷R^ÑŒYA¯nï©n·W¿®¸ºþíöŸWT7áŽpÔþš®ö¶0z÷ì„zåÇïºöøam„ÚXz8_õýP°,V÷õ°³µS³%a*d´­þÔµïË÷õ¾ê xfO^ÏO^ª »ÞãÑÚ ^6ŸŽƒÅ"£¾Ë˜´Ý(ˆ&)4ϱ—"\ èIW¶ãï)ù“”0èt{—ÉìÕ'+¥%;[Ñ6ûèGí×w U×”{ˆ²ëêÏ×R­J·“®‡Œl!ÏÆ3„ü¥«¦Im˜åÔl&{dŠdŒû$5Ëš AŠ\[îÉ|ν_4Q~ºG„ÊcŽ`ÅÄüz奵+ª‘Eø±+,‹„* ‹°ÆÈ¼ø™qn±ÒþÜïÚ}õÍ9™”òÜ ‹‘«/œ P](¦°¥DÂ$šè̱ë焤ÁŒ’*X1#BÑèŒbªÑìŠ-ùRÉÕœ8fÆ®‚^éS§™&¥îÔ²ý´äȿݷ}µMj€Àó33*XÝ^çP;x-0ò|<àgb;§:wÎZ€i‚Œð[ uYáN?½3Co$Ìo’ÜTy±À@¸tû{hy™ ,/SÊXÞ$Y4“$“Ì3ò $Øx½ÀãB w°PNöW7d ª‚Iš0VÄ¢|""\'çÈUS1ác¨Û >UWBãpÀ0UZÍNž‹Ǜ̪Óö#/FÞÜ×&¨€‰1kg5lͶîªÍ°°€0»eWÏvû8U0—L+¡T…†–Kˆ; tW ^B¥9”á%ü±†Zí«Àö~„›o„ù8øn0îŠÎy[þc7¿©­ë:¸óVDHYscë΂ZÎ`€¼p(>«D I½ÊI.B½ÊRhÎô_Šæ€<Å DL‰^&L#9Ñ£¥¢I½†93"À'Û)¾êŒ0ÊcøŸ¯1ýA/ˆ‰dêÓFp´A}LZÔ‡>×}`ËÆ‡ÂïD‚ÈŒËGIN´!t-÷½ŸBU;(ö! S£U0„YÝ]K r]·IÔ‘çÜv©™ñœ§¬Œ™àÅPv8Á„?”ƒÕªä SB lŒ&=)Ø}pÌEvš§êWÇáRDíFþ;)•Bä‹`4•,Ž7£Á–"4 æàþþyݤÁ4/2ÁÑs„-Ó "êLÏHJ 8øtõ¨ð×ÏGñŒ6´–` ­Á–š?Œ­vqK„\m=b|—QåÆŠ, ºQÙÕÒè pו5á˪Úý¡T»–{\a‡TlPáv³iºªoÝÆr«¼?ö¶„ŠU“ŠÜ fÓi\à碑ࡌnª¾wYÉy’É秬h¯%V/1>Ô—Î¥cÅô£çE9-,Â6»èY¾éÇÖÖüBÌ‹L:î‡û {ܯz¯c˜„ËM¯±YÊM1ôSšM ÍÄ?ÁäB™ƒ¢x¹œ(¥C1-x ³Ç­A.!$–ñ™ÓáÅe­ Œä­™ø`]{±*û[7¨MmÓf¼3ßçºýD¹+Wz‘‡’…‡#2{8)|§RdL¾ÄÈD~q[5íP¹Í9d|â…rðº#ïë `ûjãq´"’Ñøêf¨ðWIbB»&-,@] B×e˜[¹ê2érðB~³‹91ˆ‚n/’åámb½‚ds-„°W¬æ´ëf³?n+—°Y:»ÿPÛ%œ ½šS“p×óe¶æs:U:¥šÌÃkØnkd¢¿Ìv×ÀÝ]ÛÊÆ[îCUöÇ®rª·)›H¥&ë~n|³ ñöÒýä›ñQÄ'yÓT€bM!üÛ3ñOÁæ7Á'9y¼ ^¦nzBu½^¤rq°\NóˈöÆ£Dü]ë@cÙX¼™J½jÂ3~!ƒs'GªGe¢þ…2xyòä?Cå²À™Îg‘åÎŽà-¸Y2rÒh7þ2MƒÎòØîüýÏÆÇÂ>†¶Óºzüs­tNÂè)gøËåTÓ¥ÔGðSò6Š®·QszB[ñöz Fì¿I¢C³i=wL¢…%~ ÷ý5J02YÞ±ñnÕ 'LJTþI%´™— îY%|š×=Ú½îÁs0Fì Øªß”û2ø¬I9My òl §Ì˜r‰d,LÄðË…žrå+Ü;:ÜÚ«ñJjYÂjËM{æA‘‹0|> stream xÚÕZmsÛ¸þž_¡ôÔ @qÝ™öÚtÒ̤ië»éL’´D[L$Ò¡$;þ÷ÝÅ‚$(A/nçÚëxÆ$@X,vŸ}v)>IáOl:ÑYƬ4“ÙêUêzÛû Ýüýϯ¸7…Ó`än^ýðF© O™M-ŸÜÜ…SÝÌ'“Åæl/¦Y–%êõÅTJ•üm[n˪¾§Þ÷åæB˜ä ÿ5í×õÅTH«M’é‹Ï7yõ§›~}%Ä™‚âÈ=Ió,”TÎ4Ï'y.™2šÄý—üá O'9³:380g¼9å,Ïrõ…Fw®™vŒº¦QãU9gŠ+Ò ù@Cd°šfi:^-ÈÓ¢›å**aÖ˜PžßDæá°w –[õβËl.r5ÍXžÊÉTÀ”~Ø?#“¥LKP;èUp?¬Úß `žzѯyTI œ›Ó•yÉÁT±Ù2–q*âCd.T»ÏÕ©uÇlR&¬˜œ²øÔý.Á¤Á ã{ò^WSžëä5^rºèîrEïbËME®˜µ9œ‚ð’=-ʶŒªŽ(µ'¬Pže…ü¸Zfrj«ÿÎR‘l%ÞdÉCÛÜ·Õ²r(ðÜ=-6ô¸¨©§ü0RKêmËoÛr½¡G÷ è×$åšžmêž•õ…Ð ¢OìuÊŒé¥ ¯çý!2À®L&oïhW%­4/ëfã·óTm±õ,˜¡í]öS*Ô¿5S)43)øšsICI£: U•Û¤hÛêñB©¤ëh‹è4=3hó¤ÆÐó2ù ´u‰+Àâõ<ª|ôÞ×Åx>¸M•|h—'¸V`¬:5‡]æQ€óS¸JØB¸±T9Kaœ`Ze'OÉ;‡> "›ƒúóiPÑÎ~Úb¹<ûмNaž:&þT¨Œq<àªøù••/ y§uš9"ɸµëƒÖÃ!ΘÁya€#HŒ^' £Ý“7&ÚATd¶lÖåœîW„*ór¹¾¤:@À€Çj]m¨Î¥jÖt¿†ûõÝ3ñƒ³ä®Y.݉?yÆ#¯ žà›õëˆYÛœI@ç)×,“þÛÐ/ë¹ßûﺾ .Çú~ÛõÁ„6ËÎ|Ù{Ôëè‘"vŒ…ÊfÇôŽ‚ÌÉ„žrób„û«d*ú,¦2VÄ ¦¢Ïb*ú4Sá“Ó0Å¥ùå˜ â. òq¥ V?Ÿ…mÜ\¤cÔñBÃRi ç½¹ðnY.ËÙÆ…8ïÚmyĨžy]oœ+F÷¬s¦tÞmºs/ "˼…Iãýá=1•v\FZ е.7tÓÜù'mñ ‚ÏŒzœDë¸HÀ©`•ô%Š<àwJ¨|c,â¨p1ÖžŽ±‘î‰` cÍQ'3'L‚Éc`/ÙôAËÿƒl`'Ê@¤µ£ä¢X6µ?å™ã®pºM½|¦®[bªÔ½n–ÈP]ÄööÁLCí‚üG€ b2AaVYa@Ù.7Õòš­ÛzæÕ/½©–ågïc¿Us‘XûÆÈ­òp`™üÿ•£’Áý¼éÈ‹À€‡4óSªÒØê’ ™í”«ÆóäL >Óð˜Ë e€ŸŒõûÿ­eÃ#%\Ææ€Œ2Ý Z/WäÔ ôj¬ÉÁw¶Hz¥ðV)aç«Ùv¹ø³uÌÅÓ – %ãÐÇ ÜgîãüÎMÓŒ¦“à-íc5ósÏÊ®fµÏTøÁ×–þÅÙ à¿?è.ͽ¶P—»Ž v¨¢ –Yy{êpÚî,ÀbšŸ*Íò1ªD¹°æUú¶ž—ßs‡cÓ¡wHÞ\ÓS”˨9+ÁDjN$XvˆU¿Ï¨ä.jø-ê~®h‘\c óç† Æ%Lo‡÷ñ¯$ãu¤VÉ}B9iflOÚ~Üè«‚ÑkÐþMw*<ÞM=¶©+ÆŽ\SD¬LT¦\³@¸Ç*e*eô°·gºÊ.´£+Ü“stIÞƒãP1!ŠR3•Šï:ÙZל•_“ÄA…è‚Ù5˜ èÝgFÒ ä¡<ÛÑ %+ýo\f~*8Pj(Â>k(ý—Ê;°„9Î;`BŸwÄØÂ¾³þõ§›3ÉÂy*ýzU(Â\÷®ÚÐ?í€K;ú‡¨꿪ྥף è6N‚”³Üöù5&&Ð(‘…Ÿ(eN™¡Çæ=P€`1ùe«eXò@Iéøe¶—­jÎRΣ¥ JÔ„VTìø_$jͯ/GY«Ûy(kWæd¦Âpè¾B°—ªð.:ÁMP ³ÅÎxÖÂ}pƒkg¶Ò×YGSé 4zûE_o)×Á·º™ ÿN—µà+˜µøõhù:V%8ô‹*Ý¥1‡˜|´?œÃˆxÓÿÂâ@þ³ԽL Œ<3É‘ü…J¢¶;›t?¡¡§HÄðqAý/M°/ÈbðYÅàÓá°áY7ÍqÐÊ2¬íŠ£YŒ +æT®/Ï ;¾|f¢S˜ NMÒ£Ÿõ€Çrq<‡Lê“)L†â3¬1Labô•ÃÜÏd‚H"ÊØ¶Æ©ÁÑx' oÌv@%øFîÑ/8è—åKΆK ñLŸÏXWÐýÒ5ü endstream endobj 543 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/moreno/research/software/octave-queueing/doc/qn_closed_single.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 544 0 R /BBox [0 0 172 133] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 545 0 R >>/Font << /R8 546 0 R>> >> /Length 765 /Filter /FlateDecode >> stream xœ}VÉr! ½óܲTYA ¶kœ8—lϤò“ÄYfReûß àž¥\åHzzR‹~ÔP›òמ»ƒzwõó"ˆ–¬×ÿTÝ×÷Ÿz—À&m³ôA:‚9ƒu)X@~Z&.ð6öõN¡T äæT-šƒ¶”lЗ"X-(¸jÐ"´%Ÿod¿ìæ«vê§Úô4rt@”§ÄRÌà§Ì’qà¢ïqe=2ë'ñî¡­%ÆH MˆàRO ‘› õÚz$×Oˆüâa•Ç’·¸Á!'×ï"Pb))Ï’!8ÒÎsŒ$«²ž}z“­§ÅZÖâžY6$Z_ Ä>¬Í¿,wJâ Òè5óû%¥ÇÚ”-ÿsÎè§ï*%&’ΞÀ{Ïiæd€K.À¾Ù²ãÄ@·¹€ä` „.éþ(О}}«ÿ*Så0…Aà®Ë86æmŽ“»YÖˆ²Qw§²9Ë£S½¨Km®`‡.t]Z05!±¹„4>ò"íu]Ö*º ÃXTȬÂÄý\ÔAì¤ ™ÝçÄ€L]Ì Éwd?Ò ¹ÖF¬. dîÚQãu¬.F“À…y~6:('#ë×Ëá##yFŠL'’;Oª?©~ÝØÅPci멪 ‚‹Íe$3sš ·Ž4T:¾eVº-YŸ z6ÈÜÒjí†8ô9Ü€ýÌí’í9áG†ñp$Èð$—Âð4‹uï“}Lúëßm."‹DcŒ¬#Õaº[^ŽªTÏ™fÕòYñôÀéãò»=vý~ËŸ!å&çx2m¨åó5ËJµ9÷cÔÛƒzm ¾Ùþf‡|ñXÃÇ¿ÌìŠøñ6ê«à¹ï™Lټݔ½¸ÄÍA`I•›ë›ºÇ7¯á6ÒÛÏ {¥®Ê'ŠÉ4G¹¾ýR=µÅ“¯[~=ÿÁ²YÙꀉŸ—´âB¥AÃê½`b«­c»[VùNýmç$ endstream endobj 548 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1748 >> stream xœT}TSç¿—$÷Þ9•4B $¬ÕuýPÁ©¨ãê'*Q;@ ! ’ $È›D@ ßß… ¨«v(uŠÕRa Óª[íñœvs¬={nÎeçìRwÎö÷þ{ß÷9çyŸß׃c\/ ÇqïX¹B¦^£R$)—îïÐþ8àErÁsÄΣÅÞòæ onsî+Á¼²W`\ÝW÷«#1qï¼÷ÞûªÌ¼,yjš&hCpÈÆ SyAÿ©EÊÔòTeÐ/ÙƒV–¡ÊTÈ”šƒrÅ©luÐOßÅÈR³3’²þ÷í¿Ýþ¿þ†-ˆÜ¥Ž–KÓü:t]pÈ [­ÁÞÆb±l¶‹Â6c¯c~Ørl%æƒ °,ÓbÏñƒø¯=^ÍœÎ47‚;Åž//—7B,;ß³Þ0FÿcïŠãÁè8¡ ²yZ¢T›oÌA&¤·ë+7ÆWŸD[Ñ–Œ±­GŒÅ$‚ˆ €À{yéÑMqÞÇ;#÷(¶ Q’º‡b—ñ—‚½/€‚57®iO‹ûÒª¦}ß“‚ÜôS7þÃMÎiXn(ôcÿ­ëw>wƒ¾GÏ•sÒ‰Ý_2ø ˆ(¦5—˜/©.¶n§£IËN£q»™‚zJØ[S=úç©|ùñÜ‘‘MˆÁ³ìTè¶“Ç”‡•ltôIøôgÈ7GÀ1„ÿmC«!_z Y¦3l­ ˜5EX{ìö.+ì.Cê(‡·x‹]¹ÄŒ¹®ÀA-~HZ6†›©\èo"Ãí†zË JXC>¶4ê¶Q|ZTÔbtÑ›Z}®Þ‚­Ó¾‚q¸w…eÈ+$ÌÅæòRTŠŠl…•šjM¥Qa1qÒ¾ä§'$“grÕ(C”®:¶+mhA#Îg‚ÏU5çluˆ«Eu­¥”`¼´³£Ìå?w{rúSuÿ¡A ƒM©õm¨S4ÒÛyéFÏ™Vñ+ÄÍÃð©¹ùK{|…³Å“uç+ %¦ð’W@Âl,Y ö‘–4>«¹Øv³oðè 4jÊìNÛØµ–U¡‘€ƒ‘ÂΪªNð¿urõ»Ññ ™c°Ú4b>ô"=¹à3·°ù‰¯àKVÑ"'±·²Ä±Devf},OOV[ëluÖ$jsä'H=Y±ÃT´»œ<®'X˜©Ñ¨”-Ù]=--ÝÝšå’t†ÁlÍŒÈ]>_=Ãß}ïÓRÏ¡–d—uþEHwNWM úëSRªÏø'¡ÝeZF^ŠC¿“7úþékÉí2GA¥eQ{ã?Úr`øñb ÑäñZAT“µ®Þé_‹ËšJØNú¡‘â þ@ýeþ‡Ç±SŒß}É›7’ÆÐ51ê¾5>š›: îM¯?Ûͺ„O—³Ð×¹ðÇO8U« ÀIäX“ìÆZ‹[Q$1‡Î™íf{¹¨ºÈ^ŠÌ”ÉTjçêAé$ìMIW™µpÔ¯»V·³aªBäd äKm*@&S¡€ dø~ô²ÌvÚ¨4ÅèEŠb^>yÞê`‰¤>qœ,jIËÑòòÈÂ¥h±a¦]l´à_cvß½+dô¹ÄC³3Ƕš ‰v—ÊtŠÌû3¶£Ht¼-ór^_‰ݦ`†´ÎÔÔü©ŠjbsÉùÒš"ëйC2;m…ÿãÀ½ â¶QÇ%ô‚zÒöcmý#kúrà ýíMøj^vŸÕÖÂ×ÂÏQkE«é¶fHŠvQ›¥ûw¨rªÚRÄÊuU:DiômÚÅìéó#W$—GÚ'Ñ]t-ÿ’ªWÛ’[—ØÄúáÞåv÷ïßx5±.>A—ž*V¨ôYÚCÎ2¿áÙñ¾Ûˆúb,qª>-ë¬DÁ–v«—æ(vÑ3³8½„y‘ ¢™·‹Gî6¿n‚`Ž/¾àÝ! Íó&öBààÓÀáÀÊ—BEVVº²=«»·£­§÷l‡B²„©ÃãÓ·}ç¿ã@k¸X””Ÿ’zX*cHÄüŒ]€ý uYêN¸ªžDWÑÅÆÁɉ!v‰Ák$Ã/_qùYá“q†ÇÈYBЦM ÿ„Ó ¯g’ŸLãYáÂAþŒËVA·“øéj-W(ú{²ØÆì æ±&p¶U9ÕìЧKãÉŠ(!ܲ= [gqøö‡VA ° 2åpaÉI‹ˆ)& "¿yqáš½Üöð­Ø¸ìäqº\Ÿ®‹l6û ÿu oQO¯Ç„†}´>tƒ„ÙÅæé7H¾¡ž>Z¿­'†–}ýó!»·÷ü9ï×0ìß}]e¾ endstream endobj 550 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/moreno/research/software/octave-queueing/doc/qn_open_single.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 551 0 R /BBox [0 0 198 144] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 552 0 R >>/Font << /R8 553 0 R/R10 554 0 R>> >> /Length 908 /Filter /FlateDecode >> stream xœ}VÉr1½ë+tƒPeE­]WÂrቩ|€ÙS8ðû<ͨ%13v¥*¶žzy¯Õ-ëIjER—¿úy:‹Ûû(¿þNE㌗ż/ïß ŠÙ+“¤ÓN‘òÜKZ+)RVd¥±Né$ƒmjë“ o©84 ç}ñàuÉàÀHNp0’øèf‡š¡.a_)ð>Sf÷•„“ø&š ÒÉ)ça9kåe™œ²Ñ·¼¼îÊšE%Þ"Ô5çèÒˆbR65id¼ƒKËÁë.®Y0oŽ°Ò±¨‹!*°’Ñ#¼uPÇHðQYeȤbÒ'R„Ur¼: ¯íl^gâlÍÞ¼æø'ÁHr~ŽWý³!8xŽÏË“àüŒ0¿ê¿°Èzš“rÂ?ç´üýY9£t„þà•ŸÏÑXä2 ™:B`eg„½®!†¢C®ì´É5Ôã ùKDt^r`ëÜ,æ,2¾Íü+gíq`c4cÄyvõ\äѸ^-Mè`†Ò0ÒKãŒUÚÁ¯"•Ô´ÉÕJ³.Ä™ 1øÖBtd,ÄÈþRÖÎl¿)f¥Ã*—ë°ƒÄêsɘÉàFB«L­ ;÷hÆÛ°V½CõR’Q5×°ÞçvÓT`j_ýîéqøºé鑸Úë‘:rõ†Þ^Ê>Œjú²Ï5¤–h˜U¦Í9 ×~=‡ÕîP½˜äúZ‡Úä$#®v§ËÑ;ÌŠØ©#Á*ÊH󺂔È) —Ì:×0†P¡Ó0†§²œ‹î²—“4"ûºµQŽ’LV« K+1‘:ù%ÞD;{)¿h·ˆ®Ó4#«ÈýtW35œ®3;DÛ«:lÉoil¨îÖáÄ6` YÙòt°*P,ñ9E&eB¸¬#¾ÓÄ~“H))Sxí˜X&}»•‡M{4ÚR¿Cn“dK䡾Ehù^?NgùòˆWfle-~oŽ_Äòú$ú lp¹G‹†<žÅsöæøCàqDISõ²òø©lù²¥e2Ê ê f v{|C†CÎ0Éò€_ Ox~Ûi±ü ÃŒG+fàPìîÞ,–K'ËY&´l½úþç'•ÍPÊ‘`ÿnÍÍ3$Õ*jŸ—øq 6[zJ;•æYæs[üXäadñæîÍÃ"wΕíèÕ÷E8Œ1ßÏ{¯8ÉâæX¨ endstream endobj 558 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1820 >> stream xœT{PSÙ¿—{O-‹ EÚÕnw]­ï2ë|ã PDÝ"bxI<À$œ$0!€ Kxƒ`%(hÅ-+Zew]V-Êúluggv[Kw§ßeéE;ÓþÝÿÎ9ßÌw¾ßë£)_Цi¿¸t¹Lµ8F)ORÌÜßãBhn¾*À†©ýSQBNâGa?öóm˜Ï: u.XfƒfåKÓ«wÆWÿjLü{‹}©Ì:•žš¦[¾lEرSaÿ©„EÉT驊°_ò­,S™%—)Ô»ÓåÇ4ª°×߆ÅÈR5™IÙÿûößnÿ_Š¢fGFmQíMÍØÿë•K—-§¨ÔBê]*ŽZFí VPÑÔ*êgÔ ‚HÁ˜o¤ï¨p³P&¼Áø0Áé?µÔÐÏýã"ÝH0Eqñ"h„ZƬÍ3æ`Ö;õå‡ê*ŽàµxM殸ͻdK1ñAä(ˆÉ|8 ÂWƒnJN}¼)j›| GãXÏÑž¸ßg¾Äà‹`û·€`áõkÚã%]µÊúÈ*{¹g^ú‡IŽZpfx@øÇs·>ýì†÷þ¿T<ŒÞú%¡»I(F¤)—™(®(²o@Ó{YÛ&£qƒA 7*ꬬèûóh^úÉÃý½+1¡0™ulõº#ûŒ+0J6º»¤þÜ'Ø7{ÁÝCÿmRÀ© Oz5[¡3¬µ"²²ûY§³ÝŽ`>?‡Õc8³µ0¥ðŽpº=—¹g©ÎwD¢éͬmUaÁz Ê…sõìz§¡Æv²mg Õë?'.l4z¸•MC·`íXPàÜ/D%*,`,E–R36ãBGA¹ºB]®Â("&>2¶+ùÙaéȉó9u*œ)NÌPÜ’Ö3©–ä‘ðÓŒ«²ÌQQàÁ*\mm2£Às[k‰'äá푱«ªs{º¥„UÖé›q›¸·³mðúÙËš$o7\„«^úÕ$äÍp<$º_ä6Ù7½RlZ_üH„ƒrÁ¶ÕZgkÅø“ÊKÍ7»ºÿˆ?Ç}†ž¬Žäþí‹yêØ%js¹Ú äÖ‘ïïM lŽÁîPKü¡{¸‘É€‡“«ž~É+ZXËl//vÏPl‰“,êÙ {µ£Ú^‰ÅÍî¼D)ѳ֦­¥(ðøN…‹²Ôj¥¢QÓ~¶±±£Cݨ˜‘ÎЭñp¤7ÝðÕs0ü=(ð.vjHËÎ×”u!…XW¦«@çjRR*N„$áDÝ EZæ©$Ó ¾{ï¿–Ü"sç—kq6ÚžðѦe»†Á?A¢fÎ’4a#]o¯®© ©Âu%õÅ|'}OoÑ…@™øáqÜ( ¾+ýÅõ¤~<Œ†û¼·úrSÏK:3jNžÙ˻ğ+å¡/ñП \ó ¿–É±'9U6¯¢Y#{Ê,N‹³T\Qè4c 2™ÌFI®µL¢3³>iˆ,†Ám0|ÛÎŒZŵ䨽`«*ÁùØdÊ7ä“PâÌ­aKÇ SŒ^,/æ±§ínžHô;wþaé´–µ(-*˜‰fÎÃG þÕ/à÷Ýû"¢ÏeXjs ø ±x«Y¦“gÞ™¹GáCÍY—Ou{ñm÷Xû½Êʯ]¨žtç²æÊBûFD>cÉÆGkáC ÿtþÎIsŸ{?@PÃ:~¬ªyäæM_jèæ¾¹_MÈîòÚÃbx"º›¬M¦ÛêžX¼­ŠÝ¹Q™ãjN‘(>Ö¹t©õmÚ%ÍØøDkïéåÞ–ü¾–7¨ìÔ6æV­çýpçr‹÷o?Ž^’¨ËH•È•úlížÚ’à‹÷ºncôyÿÑ©ú´ì“R9_Úªz=‡—»>A7&€íÜ×"8ÈÔa§ÝYÑó"ØäÒç˜Ì,&2†Ð¤ÐfÅ6l›Ë¬]Šóû$À¦\ÛßE‹ölˆÈÉs5Ê%Í·#¥Á˜-T?¹Û64$h¸ŽÇñÝÜÁCWûcšÈ¬äÎÐc ÀÜW"yvv†¢%»£³µùlçÉV¹tf²Ö©€Vºù;8ý\¼}ãpR^Jê¾Xa1ù ¿NÏt9Ö›8¤ÁCøR]÷ù‘á~%Â[’Âáç$HRzRôt€‰ŒÈÃV®Lü'‡ôðy.}mÁ©9ÒŸ `Ö<è¨e>ĺ*ÛÄ}Ï9ȶp!o©Úf—£·>C:ÀZ£u†õ¶Úð8×tŸ†ož 8%„ŠòËSö±‰IõâÛ ãø¡øÕºïÄÅk’S$éú ]Tƒ%øâ_ÏwaôìÓ˜Õ-]½\J¶}B#÷6ëo¨áTÂok˜žYO~Úãôó›(ó{‹¢þ W5Ž" endstream endobj 559 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 313 >> stream xœcd`ab`ddd®ÌMÊÏ1õ~H3þaú!ÃÜ]÷cÇÏ VYŸy³yÈò0tó0wó°Ìÿ~M軟àwoþï ,ŒŒ*æ)Y¡Aá Áùi%å‰E©: Îù•E™é% F†¦ I• @ùà’ļ”Ä¢ˆ]Å ÁuDèÏIÌMJId```º³‹‰‘‘¥ù{ßuæÿ¹-$œpíÇ9ÑIGV¬Ùѽ¦{iѬ¸IeS²¦¤þ®þÓ&ñ’í»Ý÷_«‡Îvš›")¼ a᪒Ògº×ïýÎÈQÆÖ^’—ÞÛ]8¯z]ÝÒ–%µ× ¾‹Jt÷võvMn]Ý5¡mañwæêC¥{+¶¦-KîöëÎŽhøÍÍÁ÷»¯[†Õ­›í0×cîsyxôñð20J‡d endstream endobj 562 0 obj << /Length 1337 /Filter /FlateDecode >> stream xÚWmoÛ6þž_¡2`±|©Ö· :ÌkÜb@ÛŠÃÄBl)•äfý÷;ò(Yr‰% `’Ç#y÷Ü«XBáŸ%M´¤&ÙìϨ§¶w N>þ~Æ_ŒÙ„óõúìÅ¥R £¤ KÖ·Ó«Ö7É—T˜Å·õ‰01º€[<õûÁlUß¹½³wëñÅù3%qœ¿Š¢§¢0fˆIr# ßýëÓzõi}åž}q™ó)7h&(¡&GÎÏÈ£ò)"šëA‡¯TÑ{øasƒb ®XË7é÷cÛòÎ.2!dZ»õaï~¯™ßs"mn‘áGÕU}‡´¾Á±³-Þ³ÈXÚ=ÄLë\%Õðô}LºœP> GÇ »Œ«œ¹PrPº@Öwÿ¼úsõáÝ`µïgŒp¥ “h•aÁ “H®+œe^¼ß³ämsöwÌ]•`A™HʈÒá™ËêîÐZTn9_dRªôÍ®éì RkÛ;ÝOÓÞ#^U¿Åí2€¶ hove×MñikÁ ;@øÄ ™„ÖDQñ„#ÜÙ„ý¸æŠÒÜ)ú‹ JJõs ÜO †RÌé¶Ç³CYJ6â0#V ñ×Sü%àÛáüˆ¿¿ ñ‡©ÇÆö*]oë©q]þÈr”:c‚0ÅPêmén”:í·­µ8uRmÂbck'foÛn EÓ]bmСߛyôP¢!èCl¼Y}ŠÅD°1Ä–±‹rbؘ*ÞVÝ}4MS6¦‰:*gD@®šÜÅ£Bå$ùQ(¯¯»ÒCQy¨Lz_/XÚxãÕ¸3€XÆÞ.œ£¦›…b©­ûÖåÎiê·mL"Èšä”Ï­¶o¼n¬;/LGƒAkÒM³8ô˜ MÚýìz»w¢LúÑ;ŒË|˜aûîÒ ÒMX7{‹³¾ÂY‘–} lAó@».‘ú¸­€¼q€l‘R…»[ûÐÚÎú4Ý£·¸"áUAM®ÝÖO'O9\ótu…KWV-jº±]×´¸µ-[ˆ _6ë§Ç$}*“?Aã%M~¬¦OÊ¡–R¦¯|K L„›%PG»t¢¼¹¼ Uf°MG0 1]ŒËõ $ákïC¹~ uÙÍi&± 'õ›¥ÞÙ!ìƒc^°åDè >Yñ ±<}L¥›²FâýJ™¬íÉ›ÎK0sÃb_ömõoP'T®©”¡HÞ6»¦‰î> stream xÚÕZkoÜ6ý®_ÁoMDâûQâ8NuZÇöv³5‚b2£ØBÇR:RÒ´¿~ÏÕŒci4²4ŠSt10t%’—ç\’—’µ Œ3m Ó¸8Ťð̦L©˜Ò Sž®’iIWǬÌsæ¤Ì1ge¤QÍs@œe^ãêœp¸ *2,•(&$AÑ„5Ö0¡ +™05 Z•*ÀÇ„UdhŽ yc5 gR“á-ÓA0´Ã{–žÐxà *Kål$µ^ ë``2$Œ@*Ù œ’Hƒæ¼4Ìptâ-îЫ \à n‚¨„ö‚‘á`MÀ%ø¡PXЩ„<*C†„ÈpLÔÄØ”¥þ-*;éQ‚JÎÂY‹"Ïud‡¡©öèÀ÷¢4®A 8"9aÈÔƯ‰'éPbhÐWTÕ–ÃaI-†`=GF bµ‹j)j#$0 28ùHºUô‘a4Z'ùŒ6ðz ‚É .òÚbh6V£ºB;Ö“‘yA#`Œ"š€à0 µÚ1Pß вeVˆZ«õ#˜0$ MN!J)h p–âN1ëÀ²Ñ¨î%];…–*2GUQ0ˆS† @i\®@>Æ„¡vÀ§·œÄp‚‡ðh£„á]ôäI”² `äì”%¯ÿû ðÞúX¢üÃrù&úî»wTä{ò„%GÔç ›ÊG‚ƽ±Ñ¤ÙØ ÄÜØˆ2S>‹ÛbªÃÇM47}P(ð›¶T|]n%'«b~–Vì‚%'‡G,9O?Uì³Çç¾OQ0»L£ä¼OóªÄJ ©z”œ¦eña5OËz ©½LÙì øÄ.8@U¬:ò º™­P8^ã6ÍqNµˆsˆÀi;0ZÛ˜ôÄ)[Äð4bs»¨î§×xšæ;¤jiÛÔ³%HSô{Çwű“Åq#Äic´”±=ƒ8nc…é«‹ÓÒ 9þ=¼ìèáùT=°Šê±…ÁFÓ:ˆs6–ÛºíÔ£oaºG¾¦¶«‡ž¬‡¡Çþt,­Æa3ÜЬ¡GkË葲I¹ÀhÅd1§êxW'?Y§0Bƒ6Æb}òêùq¬•Þw§o2ߢ®¡T›ùž™Ö¯HKÄÝ Qn™¬T7#Ó5MvÈt` ƒ%6vÖ ã¬ŽÃ¶¢»W¸¾뎥¡gsñk Ò;þ¦8¡+Ž›,Ž!Îþdñ1eC8åtì•Æ«Q[Yß65.­îÓ³?³¸Õ³-ô—¯—†wf!G§ M‡Ý!·1VˆØØ0ˆ3ÚÇt6Þw½l-s=Ä[H›+oŸÎ}²MVÇwÕ±“Õq#ÔÙƒ®cÍÕ N(ìxÚ÷ébîå~³°wËëUm\B²;‡¼—‰'TGZ!¦J+äݲ FòÑ{Ús[º]—A3™A;ø0VùØ!œô&vɈ·úžfÇ„h½´Ø÷EÅT¥eç0LoÇ(M/9·”–ÇámŒ±+9ŒÓ<öNî*ö¦‡}"¶v¯¾Í¨µÝõMÊ–jÍ Jo4¥þ2Ùº»—´“eØ™¶pMu#JMŽ(5"¢&`¬å±sjÏ|tDrÙ7‡§ê¬L—L5™L=‚(=a»k¾Ëè{¹×»5ék%·TNf/tÙs{±—<ÍóM]0úB¾luY—GÉÙ‡·U}œå¿EÉA±Z¤«uÛü 90‡çk˜Cr¢­Š•tõ©šÆ!J* ØÓšÙ3–¼(Î =,Šùãßóyù1+³ª|HL4Åò#õ[/¨\l•ÄIœµÞöˆÜÊOúo¿¨ßÿÀ·×Céâú> stream xÚÅ]oÛ6ð=¿Â2³ü–ÔbÀº®º]ºy}ió Øt£Ö–RIN›¿;)[Š{Däñx¼ï‹‡?1Ëù,UŠå:›­vgÜC›Ï3ZüõÛ™x @\aþ²<{öƘ™à,繘-7Ǥ–ëÙÇäÕuqÓ¹f¾PJ%æù|¡µIÞïÝÞ•Õg‚¾sÝ\fÉwüW7_ÛùBê<Í•Ï/—¿Ÿ½^öï)gôÛ™`<Ç?º7 %õl!EÆ2‹7Ÿ½ÝÉÙ¯õÙûƒhHû„l‚k8Õ3 ¦Ó”|S~Þ7.ÈÇdðÏ"M\…úq å{Ù]ÓqAŸð·ŽWÛ¢m \oèÛ¸o{×víXG=“©fڨ؋#ôÇ$XCÉ GÉï1bÓYöTFö)FLÊ1Ò^×^Ÿ-ñRЧFdd'ïß8èù€×ëÖQÏx}C÷¢ž6×Éò: V½Ó`D@¾.Âí.¢µÅΡff Kœ/„bˆÀy×ìWi15‰¿êpue5V¯äàª4aЕ'Ô±GèêÚø0LÜcÄH–Úü©ŒìSŒŒˆzF·ÌD 7AO:Y—Ÿ¸P®qÕÊÅ£¢£Õµ‹Ìû€ ëë7·G‚H DÒ5sp‘;{w¬/õUKö6HrlТiÊ[èÚ˜dÓÔ;ZÕû®-׎6žmmlÒÞµÛXÄB~XRStÞqž½±j HbB‘ÓƒŸ¸4„6T e î$ðÝLðäåÆgb¤Þºæ¶\6Võîf뺲®è8éù4É«‹Î#s^v)5³<ʪ$‘&« ‰,Ùº–D4‰d' Y¡7M}U\•ÛÒ×ói=HHI"Šø|J ŠqÕcHAaÆ%ªW”èÝ®)ªvãšÆ­Ÿ5ÔÀpC˪ö7Ö®sB‘^„ay*ƒ^è݃H¥ 9<&¬PÊŠÀäΰgÖsÌS!E °i®‰è2¢6àY¡°èdWtMùƒÊvJk`,¦…‚‚˜3v"v1¥;!˜ÑyTÞO„"òYÎr+mÄ!%gÒ†õ–‚; ‘²\ò?O’çÌ(ÉdÊç™›e"?i툠NÒÊžLËmuÎl>ryϨ,÷¬§iv$ÿÁþ“8#U n3ƒæC oMhòå«Ð- –gàt*…¶ÄêÛÐ&øú|b|Jò˜LO%”Ü;_ïÐÝdÄä=ó²}þð HLû.ô@}tÜ–mÙï/ kM;º5¡l|æÃ¤J¦¥‰(EÎM½Ýöý„è%°C+ð_Ÿü‚# *?œ©î°-vWëb€)¨yêE Ëc¤¼'æ­£D!3f•½ç¡D1)}9´%£›÷“¹¡M]u8øä¾ýÇÍU‡å ÷¾ÚL9:´liÖ¿ýǤ£+hús[·ƒ®È÷OŸö~ïVuµ¦ýMÑ@ ½Æ*!§ºŸrÈ1 Y1tŒêÞpG}-ôWÛ;Ô*ô&Ʀ¡ A£u,7î ÏjQVÃîXS³5džeKì™u:qÅ ¯_Ó®¬ÖО­÷ñB_Ò! ŒqX¹ˆ¿}3œîGMÓ'KØ€r*OTölA³´mãyÙv´¬+VŠ´ˆ ž‰éZe˜I{óþM8z†IVeÔéÙ ÝÕå¡vŒ} ƒX³#¬ÐFKý`«©S˜ŸíÿY¤ Ö.Ûà‘¨»Þ#é(ö:£$­¸e©É¹ SQ(9üœ ¿œâÅdÇM#¨®@Ëÿ¤€¨Àþᘄ&P«üJÐ Nc?l¿Ï•¤P˜x• ¾U¡¢üNÞûµ­C«8NØOBl7w£:y(dý/¨Á“Xû|*ùfÐhšaæƒV4} vZÓ×Îe²2޶€¯ˆŽbaá<‹c6¢Wô%®ál$!¦æQ(Ä«;gˆ‰(ûþ½|ÜôïfF¯ð~úð‡íT€ï«áz_­ÝšM©lJ“Öþ¥i-!eL ÁÐ>šÙ5ËsÞaªš«ã]Ó• µ#Fª†L ólò}.ÅŒ‰È¤ý®ˆSl†5B.<á²mëP ,d€LML̇l LS³ÿ­+NÍGÓ‘¶Ãßc´†–ØÃ¾@=ñÞ…?–Åöñ0~ö­e½ ,ª 5¤R3‹¿zü dë) endstream endobj 575 0 obj << /Length 2644 /Filter /FlateDecode >> stream xÚíZ[sÛ¸~ϯÐ#Õ1QâBLšÎ$®f·É:–“m'›Z¢mÖé”ï¯ïÁ…$(A‘íUw_v,š~9ûaBe‚¤H€‹žýºÊVY^^ªgÏŽÎúbB¸E¹±ÎF[‘ð0žpɦÌ,üK„…Zt}Û˜ 3v{¯ê:¿ÆúØ( 1ärˆ+qÜ/sº “û`òïL¾@N'±*%ÔåkYu©.r•%wKäÞ›FkRI‘.Ï©]?qÉ(Äî¡€÷žB€Öúåf>&»%1âñÉwª‘^»¸µÑqåxÔ¼ýiƒÚà“mp“‡x8å6;æ»ì8ÄP®ÆpŠîWPîÞÿjyW—6Sååeakãy‘66 ¼>|wb&¿® ï×a¿ä0Pp”ö±‰ð.o¯¼ILB™0´?Þª¶Î‡Š{œ…ÔêRƒºNƒ*AZÄ–(gW:)Cz1ø0”¥£†wíôÀæq³:o²ÖLéÞ®¯Õ²ïàÐ'–HË,ìÄ¥H;©š[-”µš´Í›‹{ä©û®UŠÆêº¨Š¢Ò25”¦xèÛ&hTžûÀ …Kò§@Agºh‘Xu¬•Õ%´s 39Èn ¨±¯´æºv`;9à‡†¸Î 7ˆYÔFÊ% NÌÿ‚¹ðäÔÞ½y05òRCHyW[©=Nµt”c¼øBe ¨P²®`ÛŠh­Cmue0Af€¾ ÀÞÞ÷þ¿‹s@Éd¼ ˆû³G-çUÙÀáÌaÀUú¨6Bñœ¤¸r„ð‘ nzŽ®‡Ø6–† Ë”Ä>~ptLpG…ýÇ¡¼oÙòNêù¼Ãd:‹j¶ ¯Báÿds¦ÓÍw;e `B^Òº [ÎbŒ@a‹¶R³ÀÛ÷'Ïf>…DcXv”:G;Ž…fkwü“•…‚´ŒÅ«m~ƒ]vý8»s¡yC\Ûˆ­åsG> »:m‹¯AU”÷õ÷È+lhØÜNYò­Æ@sd,‘Ù6•[ltMlÉ!»uؘÝeæéªT4Cî;@I»µÛ[·I|Ô?âÐ~‘©¡Ý"‡Pj­õÓcãE®%ºþ¡kYp›7y×ý¶Õƒ^»Ö¸MüQºøôûI¯J×Õ¿M£#'c'ZîS£~åA a”—8É¿1Œ+Y|_lu%ªà”>(ç^d‰¡@Óq¼õf:œ (OÉtÚØþfìÐ+HÐÉ€ðªÒˆ95°7¥3ÐÛa—‚ô†™w‚3r[dEÚaTÌý2j«­¿õ…– ¤ŒŽ‹ØJZwyîàßË[u5ˆ½ºOÍ¥Î.WEZ››þó½¦t´§ïŽ‚Œa1õ„=¹ÈX‹dXÅé=ú* 8 þ‘]¤«¢µ‡j¶D9õåHŒåñh“xù=“H\Õ´0ª´ÜòÅ ÎÄ’Gâr…fÐu<ý§g»J ºwüö˜ÐûàØ£!ö%É®p²+ÂŽÄ€*ìþ‚©"cÛ¤+‘ì Òµí‚mæB%ˆ%ɨ§ëŃ /}RG©rBÇkB§Û~@7´úG)”û|®~} ¡do3h‡Ú{ïg,uBï®Ýïº~ÐDbòă®í*Ðþâ‘0”O(÷¼õµ@Xâµ`±)“`XlN÷¾_'Sâö»Ëd§lìú™¾z¬³¦kï§l÷<;ÁkAòÃ_àª<x·ö‡îŠ"úeJEüÝØ`ÿ³ ºÃ®ÿx‹h¯êjuyu³jýéЧèÓ£ã£Ó£÷‡G³møÜ“ð›7— ‚×J{Uzœ+}](Ü(föñ›²—JWzöŸzëŸj©§ï2ýë>˜Ñ”šúѾx¦¾s¨ž]Î"?l'‚¨Ï»CÅø¡Ï•ŠÁû ´SÍÚupð.­¯õ#cº¦f´üÜ,px•æeó’Á»J£bP‹š”Œ¥EÎ`pbÌêžeZêV‹àèvC]Y¬º< sºfÔ¯VKP¥v ¸›Íó¬ñÕÍM‘ÏÓÐÅ*V7yP¤FNQŽôs^d÷J˜ö'‰ì~‹ú?"F endstream endobj 580 0 obj << /Length 2573 /Filter /FlateDecode >> stream xÚíÛnܺñ=_±@_dÀËŠ‘ÒIóà“ÆiOÇëÁI‚BÞÕÚªµ’-iä|}g8”VZs}I\´‹—ápî—OBøã“$œ)Y¢âÉ|õ,´£õù„Ç¿=ãn €Óä¯'ÏþzE²$Løäd9Du²˜| ^^¤WmVïM¥”AôËÞT©(x·ÎÖY^žÓèÛ¬ÝqðÿUõe³7*1q øÞç“<{uÒï ñ@Bò6¥fH)ç1‹':VŒKEÄβŒHJ‹¦úwßfOE,Œ!Á_—ÕPY¹]΋ªÉШš›¼ÉÛ†! %a&T“©,ŠœX÷bÔÕ ¶3*h/2jÔY³.Ú†:ójuµn³ö¢à Åó­ƒÏÌr]ÎÛ¼*÷¡« o ¸›&ꪦÉÏ ·E[Ñw‘Õù âÌhIDÔ4u½NKœió6ϦjIÌp"f¸d<âÄLNÐPûK¤ ÉqYEe•Û8qj5g È"@¦Y¬ ×§'ø±¶Ó  'øÙ·¦Í¬ðÂà8k›e“ÑÐI¾Ê|Úã€EƲÃÖñ88!éóÀRJ2©Ó¢ \À ÛÕ··kq;Ûš#0ÏvÎÈ4ÜÌ@™!ʇ¤!‡ä #™ˆ{ë:&N4KŒŒI`èŸr¦¥!¨ÆÇ¨a‰æ“Ô ‡+™$0%4MUÈYÂAþSJà‘gS@q ÌlÁþi­£KgÓ—´T V*¦Àò?/¸iP‰ åD09N=$h&µ"¾õh·120ÎPLP÷Èp ×È6Ño#a¬ÉÇZ=Æ<:#:í+ÖAÖ+üï¬¢Æ ëVö[g×kð¯2¹!s1°Z²Z\š­öF› í(x°m;¤³xœ§% vMÀQE‘€H9ÑÞçÇ ×œIÐÒT Îiá;¯š´P#SOo±νBÒLá3ù‘%GŒëÄj+ò¶cH¦mÀfIìÀ>xMC‚óÞóc.n˜àc”yŒ@.}¦§'i ø«ʺýêÃÁ›£ß_¹z¸@*gç…x‘®Î)ÄG íG>ï|~ ñÓÈG®©aè¯qÈgãE FNMh‰¾%ý‹?¾'ˆcú¼£Ï‡Ï#œx £zÄÌ>ufîë((îcìø_Íã¢jáñþ)® ±¿8ŒÎW°§ ØkÝ9´ÍÃÛêf½BÔïn!>¸qr½:C'Æ6º«]I;û‚—dpÛ]µ «©O÷Û ž8Ù“ÛŒs +# µðnâV?b³-»…b‚ÇšVX)YK錊À 95˜½_ÄC;Ñ"xis.Ê`0”òHøgóHO˜28nÄ(gR6s™ŮüÈ>oXðxBÁ: Σ?:Áˆ!Ä"`ÃA¼÷¡AÓAìûp@ŒŠ"¹• ÜF¢äÝS ùðH~»W&Ûþ€;|ÍÓ:í06€1ŸcG‚r³®Èç૚¾+äj]´¨ß«ÂA7=1TVv·EÖ0ß}ȆëʉϳËoÔ)ªt1]d]•uᨠ*cO Bܧéuã¦Èš°Ù ÁsGq!EnJ»6@ Ÿ—Dã1ï@ónaéÂU{%ܾ•½§oŠš‹EŽû¦Eñm/V¨»²oƒxêUZä¦î¼‚¡9Ü"[W†õÖ ÀOy’lÇßh\]FúKfƒ@ZúÐhmJÞh\û;ŠB©;q¼ßoj!À(O/QÜ@êÃÙsˆÚ`á‹kMÓ}žÓà[ïeDnÔÔt’¥"Õs߯Z±Äˆ§‘ª|œTuiéìÈ@b #GéKÊBj´ïµ° ¤A£ù7ÜÞÕ%¯ö‚ ¬¹aã×—oŽú¡ªÆÚBâË:QÇšö·)Ø"˜àª†ª³ô,/ìûó¡Â‘ý¿~{ôþd¶9¶Fp"„Ûÿø;›az£Å#{f\­ ç+à¶páÙ„-TG_ú4V\†‚LbéS$¡-}v§’­€âdîp‘©­­ìûˆŠÛ:ó8û×F[°îÕ+"o]D0.zÖB/÷̈ѩ‘"ì륗2|ß0Ûi‘ÞIØ‹½[ƒbbo²^LOOd ‚3oeÞËQÒ]gíº.¥qh£äí”zL©ÜD ’/Ç÷s» ‡/¡þn€c(ô1*p 1«dœ›êmËðrWRF›ž¾åQ@ÀàüTÝ#¦G­;QÑAúSÕ¦eIeͦ£ÄŸÍï—;¹5;¸{ÞØlŸÖõ¼ ƒ ®ã±ÆNËÃ]¼ð J0þÚ²0ªÍûЃÚÃh‡ôí¡Ê£øù*!´ùÓhXlß“þûO¡a‰G>õ 5üÇ®³ªÃ÷ê+ˆ´ìÙEV¤Ý >}Ùe»óuÓV+›Ucw—ø¸Oãrû‚§vF¡§•ÊT)ü=[¦è¹#8Üás½-‘­žÒ)ü/œqL/œ±ÜAÀ¸†wàH{‘¶î•6ÆŸÀ$ãCÚ3BM1#Œ†¢ëSŽhGÊÁCÏ:áãUlíçodN^…Ãé‚Ï@›DÂ=þníIÌÎå=áJFjt)ŽSÀÐKatnãm¿Ÿ³÷ñ=ÚûÙ/yÓ½‹'š…RŽnéø³¡´Ý ¿)~ð±ðòØšÆ6¥ì ¸´}ÜõG¨~€C®~@{”G3-ŽÙÌß—$ÆŠió]*óY08ø&ì ,§»¬ÐflƒP"ƒÜ› ªdpî<Ú¬^ÜeV \½úc‰ÑÁ|Ň¿øzؘ¥sÂÅe š¼è~*•º£¹+¨¹…Ã’Žû5Ü:Ðjè endstream endobj 585 0 obj << /Length 3000 /Filter /FlateDecode >> stream xÚ½Zësܶÿî¿Bã~¡R‘"^|Ømgì:±d['«'™}‡“Xß‘ ɳ£öŸï.| 'OÆ3ì-€}üv±0Û áÛKýXˆ •ÉÞ|ý$4£ÕõuÎ_>a–ÎB@ùýÅ“ÃJí±0HÔí],‡¬.{?y’ïÿrñÞHÒ ‰SàbFÝè΋kœ{rrÑ- 8ßq'Hy+ñp+Œ%A²%2`BÒºoÞ_¼}1Ãe_D|H 'úTÆDùžhT4¤QAÌãö ?‡*ü˜¥‰A18®hI_-íŠb¼¿€'¬¥ùäbÝPð–$¯÷}Å^†Mâ½Øç‰wübv@Ÿ¯¡»Ï<ßgÞ[èœÓpYÑÞÎè»(÷}{ MŸx —8X“véõ6q$[ÄÉ!%ƒ„ H¹rñc<`¼ˆ[® 0<|yÍ.\ÇQ RÕþàýמb¼8gK§Ê€•I’›&÷­û2à’ï¾ñmf“b¸V»ç‰àž;£ öýˆ‡[<ŽGAò˜¿òF*-eVk¯fÔ]>·¹P̃´7çõWŠ/„ðþ†t»PØøê¾¹Ï×NwðH+j-“}¨Cßb$3¡Œ[q2"Nƒ8éø6Õ¾b^ö3Xæ~¦R//]ÔysçZ)Ž‘v+-4üNzA fµëÀ ºi'¨«Ýýÿ;7·˜8ûchÉz_»•2õ^¤õæ¦ä<«u/R3ùy_ÁyWmá@ŽNŒ”Z.¨ÎÉå£p¸»â{P_gˆdw´ÃÆAìv¯+!«nnŒ7A¯,tà´Ñ0;JÇáøü[†ã‡QW ŒÒa" ì¸Uº¾…ãB¤-HSÌkòµ6 Þú"9¥ÃR@xÙ¡ò9zƒ®ó….榋>¡¼ àætH©º]d -ýðÙ$ˆLÄ»Ÿ-w:v¥ìwý•Àæt-‚7t!ãò©Û¸ï]˸‰(â±—\ Kq•xõ]Ýè5öÓ©BqºéUŽý "]Ü­tlœž¢‚(ê¨æèÈõ£YÅ.1/×h*·`*›A ·¢spúŠÜÇ€·H¥cÑ$ò)ÙåAwqJu|ÎUÀ¡n‡W[öâ ÀÑúÃüÈ'ÛøàTg2d[Z$qË«x'qD½8 ÃEÙl å€ C5?*œƒG…s¹Kð`N|dàø¡Áû@¾û–i ü3þÑUv0”HÏàÊf­á¢"AÉ,T®uuSÓ¨$h ÅÛ Ü4ˆÂøÑTqà̾JåVÏæò‚Z›¥ (!¯åé:P'§…NÚÌh¹¾µÞ _·ÊÞ:'7ùOŸÒÖ›õ6‹3©F…vÒîã&HyÄŒá75^Á¡Ë)·À±eY)nV™úA_Šíþ±¾{”χmÇOFàž;ÉBO<ö¦«?7Ýè`÷G'ü ˆ}Î|S•›ë0;“aHŠaBðÎ\±ßS9ÃVœÀm94 &(±x¶w¶ð£÷ürc2„¯Ì^½ëê…ªÝtÅúüãpkþÁ¾.ÿ`Û!.hLN úåNL‹ÝŒê ü4ÂTQÔMF¶VîdA¢GÛ—;]`Š¿²m[,HYŸ×”´v–5íˆn,!ÃKD73n@†í|7êái‘£Ðˆnd3Ã#nÉo9WÓóMê*Ž¿ª~Q¸ƒ’’Éøî®§HÉdÄXЧ†‰ÈHyÎ=±tè³Ï!F±÷ ›ˆš¸mžÓà™SeÀ¥/—€¿†€jªª½¾I© <.ôoÚÎa¬Äöͼä4ʨúͲÂYàÚ¾Ï$¤fXµd}ª†`w,&“,é9~lj„0œ7ÇE:Ì0À™÷ŸM1'/CÊ/ä‰ÂX/v¾?>}K“}ù¥¬Š YiRZëF›7 w¶¸óA¦&¤º­ÊÙÇ|•7¹n=z\ãöUDc˜9{sq2s +ÜKÉÔ¥1¡IbXD×páÔô…®‰íªÌþBÓEHƒ=X§3“µ®lvXÓj)t€ F &ã,>p8¬ Åï(ˆýcúÄ}\\š¬7W¶wµ‰ÅÈ#¿®&iCɰ>½ÜgŒyGô•­®Ë ¬amï—G„“*Œ)â„ÜûT”(¯/…Ž’†ûH 6…ÕU>ÏV«;¢Ü Þ}\™j‚ÞK]@F޳¼bé;LÚRçu¦·±i1ð\gE¾´i/|æM­WKêgöG…¾ÔµN GÚ!7’«˜ÄŒÂnèLë8×eKOäVÇ[|¯1‡g —ܵmQ6ÔɨAû_™”F‘e¶ ;,¦Ñ_ú‡/LS=û-íHW¨<ÅŠ€¡Ä[Ëo cÅ¥÷qƒ(—Df2±µ8èM¿:“°¿ËŠMܤ…Î|SUÖ—PÇ8„ådlF‚Ÿu¹Ú ¸@Z)èËHk¨»íeN€Â·UN×­š¾3‚ä/È8« “ïP_Ò¼!n®ea„ÞE õ Ýè9$z\Th/ H~5,tZ€½oT‹¼F£^Ê¢RqЖ +×(;× R«AÙñ -Pñ´\.Ÿ§§¿ÏŠö\~n¼qôîéÖj¦H©øä®0A[c½gŒ£ç'/NÎOÎŽ[Ð>a¤RðsÈâ-‘ê’—ÓÍ1ôÎu^›K%ô9agŒÛ׃ÈlTje_]8ó 1¶‡ÎSþ%B ¥hÈñ¨ÈVwu^ÓE…Ð;^•&Pbÿt³jò9.y“彯³`íc<4F¢¸w¦cëø§¬>9¯‘’pxw• ó~(7UaLUÑ3¶dŒÐ92O¢§H«0ëD?^Œâ4õxlXжöûœÆ2diÚ…no,ÜT0ñ?¬XMߪ™ ¹‡o}±¼V­? v<ÒsÜJ˜T‡°>K¢›T‘…÷‰ÑÄ?X ùSWÛºišÛg‡‡‹2²ù:(«ëC7S—Kp,4Ý+H … S7ŠhG1´Ô Â<Üó8 â4j µ&FHáåë[@' ¡ííÇíüB×ó*·‘Fr*÷ÀÜy@íY;âtÎáºu¥º`ñæºØ1¡ÚcJé*úÂ×w¼‚c ^×´òÛ}ã†5Û·aË{‡u˜~IÎ{·sÕûä'#€Ûÿ¿ò•n³üfiÊl 8f¡Ù´é1rY¿ÏÞhÍ‚ߢM]k&ä‡NcÞovt>/«EŽyñµ.édv{#‰y ãÞ÷劷&˜Á-YAŒÖ•ý§eæagOµÙ"ã6ŽÂÔö‡xä 6‘'׋ܭI¸sôü®Í ‹{4^é4«>™)äÿÙ*ØŽxŒèW?£œZQê•YîÚÄŒ~` Vß8{ÒæWÝ=>nã!ôŒ}Á!ɦ*â3›çºûýÑíí BœI«\6c‹[òô â58ÆÐŽ^ÀŽÛi›``dNØÚëîô?p¤ÃLj§$g ¦•½ì¯²º¦EzEáÄ–X1)¬ŠaÕè鮵ÀI|ç©4À U(­hfÚî0[Õå3§”!%éïš¿ózMñؼÓ.pd޺݋CnŸ3àf¡áäêèôíëgÂ+5ÍEf˜v*,#`ó5 l®Ú®h;œ:¿,²mH­zˆÃÙˆŸ;ÒÀõˆ¦,tmªj#“ë‡Ñ/¤“æ§÷4{NÍ;j®~ýÔèès†ëÌ.Öî¯j Œÿ®G¿½êj‡—]÷9Íý…š™-Åb\Šîö|ÂÜ>B\>Ìo]tá2kØ÷I ÍÿÄ5‹ endstream endobj 590 0 obj << /Length 2768 /Filter /FlateDecode >> stream xÚíZëoÜ6ÿž¿b €|ð2|ŠRŠ|HÓ¤M[§‰íä‚>P(»\[g­´‘´IÓûço†¤^k®½Îw_EކÃá<~.›Qøc³”δ$•Él±¾Gmo}1sÓïî1O7Âùˆò›ó{ž)5c”¤4e³óÕ˜Õùrökôä2Û´¦>š !"õðh.¥Š^mÍÖäå…ë}aÚ#žDñ¿ª¾jŽæ\¦:‰¤8úýü‡{OÏûùç Š”×%Ç’2.‰âz'’0!¸›:/ÛÕoTÑû¿Ag ²0J£×m^€°LÑèUaJ蹊NM³9÷Ýç›m‹_”÷ácö5J’Ì™ L…YÏý¿£9ƒ¾è°×}S07ǪM+íê{‚^´—8á~`é#RÉéG#Á¾5¾ZZé¾Jˆ\ùÉol;‰Žý´þù¹]ᬾãÕnÇénÇ۾ý÷kDx?˜€J‰NÕ,–œpÕ›$iÂ`wgµ™­î½ºq¿#Jp·vS.QgUîlWyö©iÍÚxˆZ&ºy1ûGó_ºõÿÑt ÿ£¹yÅ2!`ž1S$UúæO\Q*N3•Æ„so…¿>;JD´-m^•Îÿžå…ùçuc0âÈ`.bÇúoQÌÇDÀ[ÇÅë¤ÐÅqˆãD©~šÓ}Lâ;0yõ%˜¼½•Éïnë¹ÇûrѬ?dÅÒ³¦ãíH4¡Œü‡hX!$Ჟÿ…Ÿ?½Û"4lZOqöx¼ ­g²­]€ÙµA'àllêZÛàß6ø¹6x‡>œÇ/ûì8¾ÍŽçLƒ!Cß8£Ÿ˜ ¡@JA¸DFY±5îõq™Ÿš‘L’BÿEUçíåÚ Úý‹¢jÌò{Ó¨8T˜n kGü¾GJ8P"RÒ¤½!ïDù‹ÚK¿>1]hNRѯðÇ › ©ìHSÏmJœ‹$&l.|È §€„àð®q -]»¨²å|i6(#¦YO‹ƒf@™k ¸µùÚ4¢ˆÎ/óÆQ®†04Ívƒ 5¬¾õs>C¶Ož»×Ÿ 9åó—§Héù%ÌzæšY‰ÂÊ4zî;ÊÊŠ»t‚¤—pcqÃìè5 Š½ak—ª,>¹¾ß(“šå¼ÎZãÆ¦ºϽÆ-Ým¾)ÌTÿéL@ƒtÇ.j¶—Æ5z-õ±b„Èá¬wgBF Ѽ·»Àz]ÕvXU¼ÈýBˆg¡§n"0¶`8à«–Õó/_ŸŸ Þ9ÐãúR L¦±f"–Ò$¦¬ë¥Uþf[dÎ*Кü/ï9Ѭx[«ÕwÖVŒ÷·jå|ª6ï·`Ö›Ö;QîyY•Z¦ï‡¤æâ å;2–­Ë!ªpÚˆôŒ÷K£ÁÕÞL²,¦ ÑóUP2È•‰Þ Ýñ^Á=r›œšS’°dˆ® <ØwôL8#q"&ºš$õÚ´ÛºlB‚&”H.){Ÿ !&HÊØŸÍãÕàñöcOYÍ9|ʺEw†> ±DØdò«ãr_ö«It/áÚ¦-I9zñã¯ke­{.¬‹tq+”[˜H å½'\s l5M;’—¦î&š4ìuJRÖ›s¹‡{*zÕ¢kði0VÉÒˆ…'¥zðWuØ»]b‹G#쫚èá u¶D®ôÈUKǸíô ñ)¨(å$êïñ^–ðà·y/K®yoØðÛt'2¾9,23TžG_Ù…==šH,š°È̆oT:|@äÝXÞzÈÔVîÙoÒݼ9œÚö-›«4|vÛclwVÏ4ÀMÀ—1Á q&¡jºÅ¿ÜŽ ÍŸ U8r9­/Mawò“Óû ¨©ØZÂÞ÷꼫Ø|Ê+¿¿˜)C𥇳 ˘ıÞ=¬Ê½PãÆáwÛ‘¯;å­28‹x„Æøœk° á¡»v<~~}~ Èý%}vÛæEþWwˆ©‹…ðB%¼Ü9hUÞcÈmbHÑsÉ)R=ûkBØÀ Ï%™di–î5óÝm÷᦮ÞAôÈÞÁ÷ödÿÉY&ìs< ²íeÖž»°/7/-ec˜½'ª¨$™ú€kYù¹ÌzÓ:gJDäØ$˜ Žƒ  JÝA÷“«‰”©Ë±úá4€;—cu¥Lñf¯Qr§4,౑é „œ Þô`¹Ô%pÔÞ~§dþo„Îk¸r>Å}»ÙòÓ¼i]Å'gg™>šŠnï]í¡+ dµéŽ4öñ¯ê]ãGÚk™P8“ÕûLVlPCAîo æ’‚`šNsÉéaˆù°ÐS›Æ·ª²1£Ä`Þï°p¦@§ì¿]8g° [³Ã…ë¶Ÿ»ðÏÃIת.8˜—wGJ ޾=Zó[Ô¤!‰¥;Xãí—TS{YWÛ‹ËͶ+âNkÅjw¶ˆÝ|M!8(±SjûùüéYˆ!õµ;O÷KŒA40)m­Þp-øÜ[äÅÁ¡–iÏスhƒC'oŽ<»7[ ?B5rìÁ<$®° \Ùš·—±5>}iÏ‘yã3u,ý.²Âf%•áÞÆ–wiô)Á†ýhêŠ[–ƒ_aÖ¾B›•ùÊ8£…1Àù¦X¹¡¬qϲ3í €XÖ>rÒ!ýn À‰°ÖíF÷Ï#HÜT:­°ž>}öôôé‹'Ý–N#$©¦.ÑÁSék'å¦Ñ©ÉWEõuklœ‘éó§Q\(ÇÕ׋ãáêf4ä@5$b¼K™¿A”á¯Q’é5ŠGvð|b¯M\ûëæ œò2s\j\â¯/º9Æ8Ê^¦Hůÿì$ä]$#Ì>— ‹~¨¶î´\¬'(îMí}Ä Ò*oU*ÒiqmY€Ávþýñ¦Î=C–&ÔO´ÙYBi$˜ø·àœìþ†IJ`§±¢;~ó/bí|DøÉÀ”¡]4Ñ™T`~–Ä©r‘lßÑŠ1=Ná—m»yøàÁ²ÊI¶X“ª¾xfªA6§I²{=7V‚‹w|‡©¡£¾M€Bˆ¿x õåw'ÅSåë ÄŸÌ;Øý+—,M³¨soþK_Ëñ4ß÷þMU8»µ%+á¼Çk“CLò½ß“Ž£=1Ö ¡Ç¹!týèIÎñ¦ªÎÿ-ó ÏM¯“†_aá÷/løºöK¬TwSÅÑIV_Ù!çèvð :^ƒ¿ë‚óÀIwAUôlýÇÚ]ܘzUÕN¾rõôÑŠÑã{-Æî>-ŸTkÈ¥VÄ*:Ë(›EáåñfSä Ë#èÆL½ x•«Eôϼ0ý¹Þ.&¾yfºk àžN$a~Ó3„Ý]¿„ÖO˜}òSO–òmèZTà´ø_Éunú9;cWrº¿79$£:±ñø3+šêað¡H2 í¡Ûb¥¢¬:ÿ|• endstream endobj 596 0 obj << /Length 2847 /Filter /FlateDecode >> stream xÚíkoÔºò;¿b?f¥ÆøíT¤^+Ñs(!8è*tÓ6b7Û“d¢ûãïø‘ÄIî ¤j?ı'ãñx^Ï’†™¥x¦C)Of'«{ØôVg3Û8úýqp1Æ俎ïÝ*ÄŒ`”â”ÌŽO}TÇ‹ÙÛˆóù»ãÏX’¢D¥€Åôþ³É7yQžé±{OŽ» ¥;R¢!·ÂE ³™L8"ŒÛ™ß>',Ú”'M±.ç1c,zZ,ówš@ g„ TªÄLZ Žê·HRH"ªd ñ2„FC¨b/„ƒP$D7ÍÑy$ÏoÉë­HÞÍa'D´oÿ”'õÉêcæ0c7Œ”¢íwcCósDytè¦OoÆM{Öøb ‡¼Žå"„…$(¡éîh^…Ø2Xp…¸™’Lx‚$0/& q'Èw‚ü3ò×,G´o¾Zb’&ˆî´XèÇërQhUÈ–ó˜Ë$zöjN‰ô[j¶é±é¢ÑÁlº³åÙº*šóÕì;¦Qf¿-çTE›U^'Ùryi;ë&{¿ÌíwçBFYUd™Dí\ŸgFöõø¼¨ÄCŠO;ÝåJEõæâbô목mWfeÞèI>ÍÍàœDl?LgYȦB$ˆ‘NðŸ9>€QÀ?O‚©D(o¡ˆ#3¯>'¹}9Éíò󪥸\x¤ËºITÉåÙÒ}³È—™^É¥…0(”F b¢žLÝ ˜TOdæaŒG$´r®?èVõ¦–*z Ò>Tûxh;ƒ¼a [,íyƒq7¦éñF›ß¬Ê-yËu¶ˆ‹r‘ÛÍ¡eWùÐÖÝz‚;Èa{¨íàh~x?Q[¼f^;kÒÎ Ûƒ5Ð"*bÑaꢵ?ÿzyü¢WÞ^ oo|hÑT …$&ÑÛ¬ôôï-5ˆÐÂSFU!`­%]÷¥}6ç¹®/è4ùj/D ‘%)™×áF¦ˆIq9@DAÆ;<Á­HÑÎ&i•f2úã4Hˆ5œo@Ôþ¾Ý¶à´£„$½=X®æ¼pë‡åf³©Ê:DTL9A2‘…z9E[g7öC¸ÔÝŽçÛy4…#äÚ'qøl±‡P` —NºÅÐ×ʱ $¾Ûÿ0塳NGà*Ïô6QÚOýÒ+×2»H‰3 jÊ,0$ï°~Mœ",<öƒñI¶t>•é-ØJ’$;ØJ)”o+aÍðÉ_%¢Xc9©ý>˜=~d pàŸg³õ7Z›9ÑÚløÖ§r[’µrm݋À·¾ý ÿœ/â*krß°ë¬÷là,ƒ†,d^pg ÷-ùoß…EUaD™â>¤“#O’AZNI+Ç ô¾ÄøŒÖÝêuI_p%‰Ür¡•5ö¹EpaÉÉ6¦ú E“k] ŸpjþÌЯ½…Žœ(ÍŸ4ç ÝW] Û8 3;z…îÑ>J*'D›$i}Ú^0:þ¬ k¯è3$·ª½AoÍ ¾K=Ï9åçl®“4rUÒœ@‡&f¾k ®ÂÑE@ûà½eýÔD.WObCÎû'± ã%<† 'U)pLõïÕmºŠÌÓ½ìLGÌp&±‡í•n¼·!¥•w'öØp‹º0Gh7kûìÃuxéÃõ›(–àùµþš¾{a)P­:òæîe$'˜á…@`¦´Zwê:Øç†TŒ¨»xŽ€gF_SÑ#ˆ8?80'»D‘a]cìfä“Ïb2iÖI§¼Î¡bSlÅÅöi‹^»áµu`¤ur= ¯;‹Û:¼‡¡Ei¡âŠÜlYϦ–»"{SSÔÁYwV!îºwÓf‘àgí—îàd[AG£=»^nwl Û}üÆ‘o¦NIíž|m4) ;ùÒX€KKÞ麲ý'›ºY¯Üé—MÇNàc<õ懊ºXŠG¿å§ÙfÙØ´çRµ€7þÜ&ät*Ó¹½- 1clw»øKkXhS¸J½ƒM}}››z»Ž©9¯Ö›³sÐÄëý’$& ÿ3û¥‰˜‚2“ƒ:¦'OŸ=9|üäE($Ò>@º4¸ê2;jâÀ)ûséï`uS’D³:[æ(dHAAD/^EåZ¢º¥Ã¡½ZÒm˜[¬Í…O šYØ›¦eŒjìì¬ÊÏ\x¡ñÏÉr]ç »©¦¹¿JZ}uNý –H§Ñó¶`#Na‹^€k±#Dûœuuiû..–j„PIü€¤ì¿Ó¶ç·ü$Z"C©›q@)Å8ÙW‡¥÷HÌha•[*DZèØT‰Œ‘Ú¤Fcu¿&„011À³XÎãD(OmF3‡vusÞ4´gNÁÅøÅgýLÌu‚~]¶áÞ×ÕÙœ`o´ (kÇmV –0:ì\%<¤Â ü${>Ç)ì †Ó U€Zmãx {à×ÔåPPb–Þ•3ü˜r†ÕÇ,»Ö3(„y²K=ÛZÏ l=Ã7TÔHˆ5;¼“Á¯•ÁoªíYMɱÜ*Ç‚Cø’ÞÉñÿ3ozø•¶Ùr“  =RksG(mAX[8Ýñ¾>~0ŸÃJÚO¼Hx³½$zŸÕæ–AºÂ:xf"Í"\]çÈ5‚ÓPáöè:¶Îó25ŸÌÙŠ‘è¯W'“¶0¹J&=~½ù'ûî*ŽÚò㪰Ùÿ6‰_‡Ë±$i:2sÏtš–%6#*͵¬©P›&N¼‡Ú©ç0¼ÞT„nù0”»»Æt¢D%Iå.‚åÃ`Ç™”;Ô6z³yµÃé`;ûø¾ÎèNTÜ'½³t7êÝßb¦8‚ ¦þE`.FKýoÝ:ÏÊÅRK‚~±J{uçÐF ¥Ú6˜¶W{ ¿ðJûBOŠ£âÔŽ\£°©ì›±ª³îãµý8+JGÀY^æU¶ Xéò>WOië÷IrÅ•›:rtÜÝÕ1аìôιڮ¨mx#ü¢6XF“g‹‰pËZ¼¿[ý_†·›¥WOP_ÜÒMÁÝõw|­0õÎ6eWŸê¸˜ã`Å=åÉ^¶·?º¦¶ÂJœ’nרBJÿÏsPðúj³Ç¢æj³5»áQ½S¸D[‡t›e—ánÂ^Þ úQøŸ‰_iÜq[§ùÿ¼4ñ4 endstream endobj 604 0 obj << /Length 3416 /Filter /FlateDecode >> stream xÚÕZësÛ6ÿž¿BÓOr¡Äƒ‘^:Ó¦Nš>R'vnrI;7¬D[¬%Ò!©8é_ß],Ä—!KnÒ›¹ñŒ +p±Ïß.È'üñ‰&FJfU2™¯ïEînu1¡Á‹'÷¸§›á¬GùíÙ½/Çñ„GÌF–OÎÎûK-&o¦–éU“UG3)å4~p4S*ž>ßd›,/.è9Éôÿ•Õe}4Êšdªâ£ßÎ~¸w|Ö¾?â@F‘ò§Zô9å °²Ïs~îÉì`)ɸÑ[ºuh%Ιn)ò-£~ót•V÷aÇÓtµsï©—=+§;Í’¶wB2NHfJ{µhάAý1§÷;É)å%‡Ä5ix¦¸š>=iZÇLY5Þã!Vêüê_äQA}ˆíQZtÛ?šñiPÒ0ÙI}‡þtbR‡]£Ô!0.²•èšöŒÅQ!ÿOOq_A ‡1ìo¯\̹<|x‹`Ô» 8$D¾#6Y÷…#5GáHxI•]lÀ&éÞÛ.…À̽ߠpŽzŒ=z|zŸnýÃÙÉ Zªôt'§~×0¾Î›¥Zq4gwŽL¶K ÒF:á-²ót³j¼ÁÆ<šž-÷à<ç›bÞä°¦›-JŠþaQ68ÐÓzsu圤¬ü]`Ñüj•qÿc·Ö‚Ó;c¹neçw¶‡¯ië’[ÅñP‹ü#â´F¶ŒÓ–¨_×3¬µ¸ã÷ å"]k=‡A‹=/}:oê¦\»0…Ó]’á*f‚·yîu({Y&µúg’€!5ýŽl‡6{†£°Ä„ŒX$F™­)Wû„vÚ”WWÎ[”áø€$Å<¶šÑƒtuQVàkœ‚íïjzr½s7"Óuú>_ûïnTä5|º‚AÚäÆíDC£Yä¿F\fUV ª‰Ü&ˆâ€`†ïÃ'î}"Ó"»¦;i± A¹ZУwG.Im<¥K%ÝOåô-0„ñ‚f«¬¸h–u(i +™‰Z-=fMPµlc”Oÿs0¶Ú»I³°Ó`Ç«¬Þ‚ºeZ®{„ó:}ì´îŠë‰†ì)Ç‹ÑÎîdç@¿F‘§T=BÍDg|q0®3¥-pß­´ÃPr34Á|ò¿`ûìðç¾Í£w)ã\qåÃgMóžbMÚœ7bhà«àó=8úu´©¸õzÔ‹ˆÉO‰.¤ã,%Î!p{sÏû¼,fdÖ‹Ç¡ÓÇò 0G4#I×p¥¬`TçR鉗ق0WåÉŒ`0pH·L€¹e]±ïÛ ^Sãk0yi 8 ¹mk•žS„Ñ6RÅf`&NëùååÙÉ˳Óò¢axù)¡z‹G@›iÅoÅi 29ÀiÊ „"xéa œ¶Ø'˜‚ðzrJ×6KÓt§›„)!þ  œÇÒEó"°Hlíÿ#"ÿX’h¶Vf”šÚ¦ÉWùŸd›PDÎdç{¦µ,–·jUCþ”=¿Öà§a®¹·›HÄâHv,¦žå§§4ïÜÞeR4[ÿ{‹;R¿’Ñnõƒ÷v*{y×ò¤~,3ùXJ^ÿ@œŒj(äb7ÕQ rРçu“i^4YQç͇РéC¶E¿S… §´m8†a+ÙW‡ËþóÐb`9=qŸ~œó€wðDt†…†©dD_|œÒ†A´Êê+JrEí #¨óóµ×ÚÀ;½",q9@ßÉ9cC.éâòõ—¢šlMó]<{!ÓÊû.2T퀛§š;œ¦ÛÜIzÛœž¼²£¸uµin74@O² =Nôˆ“^èah¡AYòl¯}´ú>Å«ƒx™Ñæ^íô Њ ñù?ÛTMv5UßT‚*{»Éj×VÅú¡¡ë{M"t¥ÀN{}{µ`¯h¤Kß@¸;sÕùÚ…še ÄCañ4åÜ@(IfŠƒÖLÝÝríMgÀEê!uf9ª_c˰Tð{©7ë]ijÜRîþk#qÇMíjU¡|¹‰÷ ´÷‘4Ÿ"PWÌwˆÙßwˆ>ß»Îë]ÛOnê °5µG^}JgºKIÁŒIöœ$Ø®äj–U¹¹X‚Ù¡'@Œð‘[¶æŠãŽ*¨“ˆE]x|µ;PÛžø@-·þE“ÎpÆxÐÄ ·ÃþêåÃtÅ;ŒÑŒ á{Obk†Ê2P«QéÅñããÇÏŸ†„Å™v?GLMŠMuWêV™zsò¨Ý‘8RÐLZ»Xd]sÕÝ:^¸>OZùûß1ºÿSúgéŽëK×ÕÁömM(—þ‡¯ÓeYý‘þÁÿ»ÓyÙ4´Ô“* Ö¯Ët?2†ZHRÛéYQdÔ÷µÓG ¯Éô4s­«y~y?h¤ ÄÑSÏ7)m;o¨çå-ÐNO[³·ÓJYİÑó›ÄñôÙh5 §¨OïèýoŠtõ¡vðlå%…Hv§© €Ñi*‘ü¼-AVaг²`ì“Ê+Ô=âÚß§«•Èm¢Øø|VIÍ@}‘p&¤ÜsF»¥žõÈéDyØ®-Jªlš+b"Àiºÿ×××pum ˜Íkwa]™‰eÈÀ"®Óz ’kÐ(M‚¿ƒÿÙbã®_ºÿK×Ù›ëç+°O°Í´Gò¨›ä!!UDÊBäHX þvyl©g=òÀ ûxÑ-ø0’OŸbé *»J+ÐÚ†NðTŒGȨBaaà;WH‚e‚ zÒ%ü40šÉ.î}¶7™så²Lb&ÅHäW•sï÷ù:m|ÿó´\mü ‰D (›£.‹œZ·aÌ¢LÏ?»ËAÄ8*Æë* "e|Ý–yöÒU]>vU°Ñ۷ż^8´ôcWó3-Íà,n¼ öõ{T_*¡}€M³½|E7ýÛxÔ{àc¯ * ‚, •ÁáÑ!&·ŽŽN&=®1j¾íâf„ž > !ÎZðÍoÑd!©ƒá$“kGºž äèâ«Éé½çþ;Ÿ!ŽÝ.'àäš^údÇ—Æ¢q«}Ù>8íØ@šHÎñÃnä@šFñˆYh§Á1TÎöÀ‹Í"†Á ŠÚ~vuyÓ^À¢Öáòp†1^Ì6 >¼ELá2|¢dÁ†¦°_¤!Û»iê¿ûf $±È`’Ń/Ëï³* v~5ãQïÈw§Göÿщùßöbü ‚>ÊÀBnû‘„œþQ愉äfÒt(‹´þ‹¡œÉ ×] õÆÑ8Vý-ô"=°CMKIiÅ`s>ÀMŽÇÍá-Ëûäé+¬:W«`ema |OewYŒ'€4H\<üýÅ( 2ÕE L%hTM·ÊÍðqÕœñuŽt1×Ôî‡:,Î D÷ X°*ä\“±8Èbô-2n$…=,ñÇ1•p[˜Aid9®›ƒçx8Ò}6Çs޲x×bau÷UF>¦Û®kM%%ÖÝØwÝ3 Xxv'jxk^€Éoë,æPpõÊŸìú„°Ãà)Ñ¿ ÊMõ»'‡åߨ÷E©A¸<`àÁ×IÛ»[ß™ïU?ßÿ¶õWåÊ>Fv¡A$±GÝ3¸±ûiU Êñqqó›h¸» Lcß=iêíµ…Œê@ú°_;2¨Äæˆü»/:‹qOÓÊÿ²ÊšM…‡l¾iŸŠ%ÃP•ÖÔ±¡ɼ)«à ¯N+Oöö»¾ ÙOïšÝ'ŒÏX°'«ðdQÞmÙg_ðÖ(n˜ $ZÙÚÎõ²$£ø'Ú»½6ÿ‚ïêK„yƒQ-TK:ý¸zuã§eðtòtbíÝÜy¯{åAn!¸'8íØÂ¡ÎÆ'+n'îdk§¿Ì› ¾-ç ¿Ë endstream endobj 611 0 obj << /Length 2692 /Filter /FlateDecode >> stream xÚíZ[sÔ8~çWäѽ›ÖÍ’`Ù*`ÃÌXªL·“¸p»{Úvf`þüž#É×¨Ó dj÷a*U±Z’¥£sýΑéA ôÀÄŠsb„>X¬îŶw{~àožß£~Þ&Î3ŸœÞ»ÿLÊzpz6\êtyð!Éìãé\¢•Ulï¯MÖdyyŽc÷ŽN» $c7¤gî'%Ñ‚P.ܦM•U³9—<¢óOi•a[D—3¦£lQ¯·Õ/±¤d6—±ˆN/27µ\oWi‘Më|]º®Åº¬ê´Ä÷jß“–n±O³9S‘µÁ-h´t¿êuûöjÓÔ~JZ®±ŒínW.2Ë4`6å„JGþ*K«fkÀy´>çˆrGGµSÄM·4ºÞt„¹³nÓóÌuÂKnc8‘ïªóUæVNË¥ëªÖ~ËÒ1HV'CVSr@nBT¢®Êx*ÉIÓVòÕ¦ÈV™; œOQÕ(E-·±ÿé_¤Åùz›×+8¡Ž5rbüæYS.ìôÁÌ0”îô±\T°Ñå~Z‘+õæX ˜ð£ãe‹epa$°vaPBAÌkõÃÞ´d!,JÀT‹û9@ƒÒ†ÓŠPã[Ì ·T³+GŠÏ×`²žÈ×°nçz;Ãbë/1M¨«`q•€-¾„èV†ˆžì÷·ÕÒ¿/‡ˆɆùäÉ÷Ù+ ªÙDE'Ûê˜HˆF#ˆöæû¶½¶¾æÊ£ÏWöÄ{H\ ¿½‰Nñ¤b2ac¼þÓDA£Ã7U½^¹ º©zšÂy¢õÞ¬ã&<({‘4ïï’'õÅvÝœ_lšzxê½Ç‹¤årïñö¨˜ø®iº¨«G@<‚X}Ÿ'ŒCıéî-eRДnzõ¹¨ëÍ ®Ñýî?Øò:·¿ˆýŸ.Vƒ_ëí¹sß»Îyz¦k‡"°ÑE(½ÂÍëC`oBX_±‡›~ö|0=ÀMJ5ßHkü ›í<ºÄ=Àrž{øFh§ä:Öæ#'‹<+Ûúùãͦè|A04š!@÷—lÿÉ p¨À6ÿ›£Ý‚pz[’§üÆ íÊsÐ%Më²¶ˆS­khÊôû2ËÕbÙ¹‰ÿÙp÷F endstream endobj 617 0 obj << /Length 2719 /Filter /FlateDecode >> stream xÚÅZ{oÛ8ÿ¿ŸÂØE»³|Sj‘Øë^¶mÒ @6¨¶’øbË©$§è~ú!©§)Ûéåp(R53œä˜(üc£˜ŽŒ$–Ñh¶zBíh~=roŸ0?o §­™ÿ8{òüR#FILc6:»j“:›.Ưn’»2Í'S!ÄX½˜L¥Tã›t“.²k7z’–¿áŸu~[L¦\Æ&K3¹<ûç“×g5Åù‚âÌmIMORI„t’¾þü÷½ÿí5òì/ŠI #GS¦‰ ÚM?»Iq1rœ­óU²\ü™”‹uæ†fë¬(“ T:zZt艘0-ATKêm§ ’ÅÕ”YâIíDcÏzS¤sì‰q¹®8¯î6¥]V"ešÌ¿OA¦êÕ]¾þ’|Y,å"-=.ÎÅ taʱ½Zƒå$ljkf˵c ý ¸œ0+‹}•…ëq+å|3+§@b冫ãSÏênðÛ¢¼ )LPC(«önÀH†×S2/BêeJ²yˆ°Ѽúèd€®¢š’§_7iQÄ)MÄ”€{¥17ç·´²:oâœÍÔz^ºã“DèšÕ± ‹ )‚½.-9Ò$6" š(ðü)ٽòI¤ŽG­Y/'èãØhטªyé=7F[ì%(¶ù½ -б6¿ËÊc«Ú’µÇ‹È Š(ßO”CÐÍÝãL1ãõÝféƒÐÍÁÏfå:?òÇHXsí¬* •24vŒÞÖB)¦GSz­u0’8öYîvÛ YZ¯á8¨|ÆíNŒâCvDضämHg‰™iköx€¥Úéí¨úz™L55˜ê²##Ê\JAC@XÁS+­¸p€0œuáÉ5h‘ï¡ÐPŠ˜(ªØÞ…<fð:xþ ŠÞÂZÄYÄjb˜1Œn’ øˆsŠ""2R;£óGE¨r†$)±…¤œæ÷‹Yêg©Û-`§ ZM Ýaÿ˜hÕÝ.n<Èm†ÄM‡s/Rñ"ÄvÊ…!BAvƒ”3ѱNÇGèÎû¨Ù!#l£”Z³P‰á´Ä¥èÙb((ö1d=† “EäÂcÄÀß# Y@Dû%ª÷‰ó DBËD}:=œié(þ1u²9';ìt*êj”#‰ k‰q…<©jóDøõµÆUÌÀ%ˆÅ†€„¬..éhï #éð›¹IFêk9:}òÁÁ¯žOG ±˜T{‚‰w ¡ˆ(µÃn¯}Nön*•¦pw4‘|€O j~DPpœnŽ&nèÐ ×}¤ð¢®\à•Z?L¬ÿ[ ì¡õß™Oì7_tˆžØY¯Ë 2šŽõ*†=Û1 C#· Ý—FÕš@Ô‡è/è<\ÂFÇZˆSk˜(,MÇ Ñ 'F²žÁƒpÈ&†€ªA (%FåO¹&¬:ÎÁ~©¸Â`sÁ\Ë]C/_V ¯ lN:ß›:M†Z}é†~vÍÙºL–®{שö£ÅŸiˆôiW×°ç+š®nºÒu{b:R«)¿0áI?gU ‡Dq dã{|‹OîíG×|pÍg×¼½ìpøšÍ 8@ßÛ´#'G®=õí¹oýʜ·~×Ü£IÛ6ZdpÆc|ê Z†Ÿûª:dãƒEÄö‹æ~÷oÖ®½Iîý”¬öù?ë/…ë!(´þPB|Ph¯N°’ÇÏíÛcöB¸ýŒÙéè¡Çõ¸V=¯_=;­»øÿß}QŸ{[áðÉ/¬yñÌÛŸ¸±¤ö`Ú¿qN²mSo×4϶¾l¾k,? ñ½ËYy…ßýôŒÓ8”¥õt¾¥’§ó†îñÓ«?˜ÙOÞÙnú6ô}õ¶„ #Íæhµ@&ŸÂÑI¸Éšû$¡ü…xX"Ò§üÀâØÖÚZÒuÆ)PgTP"ÏɉtD:‰o±æƒ"£ò‘DV’Øæ<(‘âÆÄ¡Mk*bh9Ø:×äé,Y.Ý«¼I‚WBÍ.ûö gF{ÒÉ™üÂ=´Þåiá¥Ep3fàåÿ︔ð¡‡j-™;@KÈßnè÷Y™ Èþ oß%yž¸«;e‘Í!Åþ^&yÙ>˜‹ñ:K‘ñDˆ]#Î!–ýnöf‰ñ&›ùË&øæÍb™^6ºg(0wQ­Ò2^4&l&iÂM¬?…ÈàŒZ‘G!x³£j6‡ˆèùðD>?‘·{uÆËêÒ—vÜ /©d8®òA·Œfcë´s€Ù¦¡§qZO‡ÆPtOY [¤‰º[ä«uVGËz¹©nO!f–×ë|QެܣEØÙºÛÇPŒ«¤S_À™U­û_›‚’×W¡¶/‚h‰{ùèü°|tX6º_‹s¸ ³©°>¢†y¤Ø9{Ô͈‰÷•’Yóƒ—¡¬ßÙÏZ.ïæ‰î͸­ ^é@8ðÚ ‚{HŸ%C\Êp¸4µL³k„Á^{õ¬•Q(Ö_X?.udÚhÉ•7ÞVý¸õ»õš±³øh뤽 ¹ýXXZˆ™/[dÔþiЧ ­­¼w*c^¬¸u ÆïŸÎ”€I>=¦ÛïöcÁÛhaÿ/"àXRÂaÇÄ0٠㹞ֵTž\§ +Ü1 '½:”Ñþ¥ÈžˆtÉÝ Tþ#:û'ÖõÿÌMá¼ endstream endobj 624 0 obj << /Length 2835 /Filter /FlateDecode >> stream xÚÍZmoÜ6þž_±ßNÆyñM”‚Þ©ë¼´°“x»¹~µ´WµvåHÚ¤iÿüÍp(­$síÍ!V9‡3ÏÌf³þØ,fZˆ0•É,_?‰lo}3£ÆÅË'ÌÑÍp> üþòÉÓJÍX¦QÊf—×CV—ËÙ‡@&G¿^þ8I&:.¶÷ãÖlM±¹Á±'§—ýŠó%AÊ{¢Ä|( cI˜ÌâD†LHš÷N"ÇC:j®;Éþ©è~˜£-N1X„èH³#žŸðÇÔÙ9š !ƒ ¾o×ø{u4·c8 ‚êšjóq{Ä gAÓ64Xlè™û}kGk!£Eéd(î­OÌ8Œx/e踌T3ç’‡BÍæ,ZN”?Kåô+ñ®BðP*ùà"Ò0V½½´«ºÚެ9ij&ÆËyyÐr6‡-缪×YYü‘µE…{%£ ¯6M›Ñ*q%³ É ò¶ª‘³W\«P²Žõrþí“”)À :ÅWumš;k{ÕfÙ°måÛ-BË© #æI¨t2ÄÇG†`OÑÆo’JÙ°c”‹™“/«këN_,ZÌy‡œiØP2Åè³b³4¿›‘ÇÈàMÞüÆ`[ê–†¯ëjMÝV(=²¥Ãxl7§/N/NÏONn©r¬T¢ß€%º[Ó¾53&¬ºE¿25‚di°ÈQÖþ|>â:0í:Û;éh²4”Qï‹jmˆÃIµW°¶˜•ÔõÜm9X^C=8ø|×a­};7-Îùg¯ê[ê<«ì·KS6¾…pƒÅ½ÁÓ ¶1ޢˣD€v}›"Gá„Á…qöÛ2A|ÎU˜Âç `:†ñ0êwÔó¹'M™ZÙN?Ì//æBIjgÌc׋!REq·ØUÛÞ=;š'ÁÓþgYå â^Êâ ¶}·­—[Ó¿šåÉì7yÓš|Õ³à‰¢¶OÛ¶Ò¡ï³{Q’(S™#~Dc–{÷™F~0wàakñäiß„³Í.ê-òÂlrÓÑ[ˆ|NIøú~S¸øÙ-¹?ØÏ1}úÂÚÒU½Íê/Î…Ó„Q ÷®6ŸŠÆ,‡(;òÔ¹ó¿ÿÁWÏ`ÿ¸JÀna†äáZ¯\çOÕ•ƒ*ð£¬Y^×e<²štßlèãË•¡ÆIµéa«*·VpàyySÕE»ZÓëuUSc:Ï®J÷ý»A…K¥ÙFÎh]=é]ÝëÚR† ÏgƒvYðÚbk¼­4Är³„©ꥆ²2Ô`©Ž©õUrrF/‹×/ÏN//^Ÿ,èV|mj´ÇgÓõ¯ç´ 'ÌÐÒœ)ɤ!K¹ÆHl™È„ ‹èÎLÖlk³³N¤Ë6K=ýt¤â +·.’cZÓI¶Fá¯êbyc@Šéà,kH²h¬Ø&Û!ø¶±¹ZÛ‚e7ØBj†¦Ý˜âk°¨&€³¬Îq¦މ€§  5·Š$sž+lþ¦c7òg>9;¦þsóÙ'å/è?°ï@%cœÿ‚ øøî¸hÓE韌éð$ÇIȤœ©ˆ‡‰x’õ|@îƒä S+"Œ3&ÕÓ$Šx!ì²D“”ûГú8USx–W»ßeUØgh³|=x«ê›%‹Ü¥2¥HGèЇ‘w‘ÚÚ\êP >“LãäQ­:êù€Ü£U*q¤ïc‚W:jÅú®ìÝ K\±ßŽ«à*k¬…BW7ô2¤¡ï«’Œm†±`ºñ0Ç""ö¾rÔKC£gÆÂ>´¬»aã'GbƒÚ¡ýÒ™ÑHï»´’A°qëec<ƒMS! 8Ö­"\µƒ'«¬Ø4` ’ÇS¬àœHx\°sŠøÅg€fŸ· Â^¬»°G/ÏïîÊ"Ç%dÀÍ‹ÆLEöª!kü»(Má¥iâšÖ—•T`pD»72Ønr+¶Ï‰ Ì‹]Zÿq“7PÍ|*—ÞÔ…\÷EBѸ¬ UaOÒ¿¦,n,*¶å S:XqÂ>šSK””c«íÂaŸP„M“×…+¡—ÔW¸IÖ‰l»c›•!ntd oèÎ3 ÎøEáHší]Ÿ‰6ÔucÀ !Qî)­¦¬²å|éRWÅGŸî¤zPß6Ô€õyU”†^):Bc´2ì(6 —Œ³º¥¾%½Ç|Sµ.0ÄBQÝkgѨd™gÝvOmê;3>íÌØXü"…ÂÈ ð¼~Èz@H÷ê \ù¾Ú”³0–;ãñó¡Úå…Rý4û˜Ä_ÁäÝ·`òó£L~… ã*ø=pãן >꺢Ña¢Wžc¬‘£c¬óo}Í*4ìZO±ØÇCÎãìÈñÖ§hò˜OSÖ©%ƒ7BŠÉÆõ?d4µM³~/ÖYëŠù3ð“1È ŸSG¶«dÑÖm%k¹ËŠO é/ìÈfZ±Z›rÙqÜ]D ú·ð™D¢qÉÿúüíûË…ï6ü{uGlw¶é;Ý—šŠbxâ龡c}S¨—]¨‡Fó¥iÍ:ôÂv¬C%ôÔüÔ$R2Ù“¬©þl‰µ“ÇÍÓÖEn“0ã¦6YÛIÚ®2'Õ¦®ÜK ‚H&PNI<¨½4Û ÷1ô¹ê_té6H£JïFÒÇyv—åîœç™/àQ vÝC@D¼¾ó¡nAÎ}ÜÒêëŽâ;w2¼]tŠ>˜ûìCyÿ½ÁÈ[!Ö°ll}‹}3&ßêjª1õ§"wÛÖk×ÝÅ"¦/¼÷NPâÑãW6ûô<Ù¯Y´òŸ$sä º š£K†=w_* mÚ’Ú{²Ã÷û໯¡ƒ¼ 'x€ç÷bxÜŸ>~µÇwÖ5WiäÊä~o^[êóíHÖ@¶1ÛáG´ÈuwY9¾¶´°5 béô–Æ%l£Û-ß›¼Ü.±"¦ w¸ât|Û3â¶Ï¸×OåW¹òpkÇÇÈ<‚ð7°*®¼5 ïÃÄ^`8À: ˆ$ƒÃÛƒÖPÿv˜Bô¾Ê®Š²·im$ëK©£ß|–Zhj.µXŸâk¿/øÒ±!@Ñ{À‚Y…P ꋽ£ Nàê{wªÅØÛ:Û4צ® amµ3 @.ŠBµK¬~óo#cúá"Ä y:¹Ž~óþò±> stream xÚíZmoÜ6þž_±e ˈïdÚÐΡwhÐÚî¡@Ûò®ìÕY+­%m÷þüÍÔëjw Àáî^Š ‡Ã™‡3CÒE taã…æœXa«í‹ØõV÷ ߸úë è–@¸P~wóâÕ[)4&6¶tqs7du³^ü½Ù$»&­.–œóH¾¾X !£Ÿöé>ÍŠ{ßû.m.˜‰Þ㿲z¨/–LXm"a/~¿ùÛ‹Ë›n|ÉØ3EÊIJJ©!f¡Œ ” /ì/8 ÌH é$ÑLWGñ[,ãøGåhî’£yKºJ œNÞÑ*>¤åŒ)ZÚ‡9v–(i[ŠfS•ûûÍnß@«‡´Kk‰¦|±d1‘Ø…ß\]¾½¼º|÷æò:H †ŸÐ\,©&”ÊvvTÏIBˆ"[Q¾O XF˜Ú[‚¿6úöá)Ë×ÙŸ/÷v4 |K;ýý¶ÿãÂð(É÷iàQ$ùSÕþå]YùîïòÌAG« ø÷àLß÷„D43¦1±jåx _J}yy‰Ô‹%š ¤œPxƒ2VIQ'«&+ .QYøßëò®WGI•úÞËâ>+Ò´épÆ¢?œ\9(KIQº‹ÐÁÂs²«²yȈZcBïnÈ5ÿ‚©“©OP±P°î”©3^ái—â3tz€·”Æö­RÜ»-ºÂœ¿€Cpº èMÓì^¿zµþ@ÖeFÊêþÕ”Ùœ½0NkNG§Óuaì3'ÞRN]B‚´šHÁüØ×iê§›äuùzNX!‡ó},ÊX¬‰Òâ¥ÿð±Xåe®ÝÊ-˜ÑΗãH¬Hþú m_8+ó_½Íòô÷^½”X)™ót®áq3¿ßfC"E˜îlýç96H¡{o˜áN/e7ÌÕ1&ê#˜üô9˜ür–Éï€ÿ2úÆÿ<Û¤z(ÿœã‘­ÆDk6÷¹ña¢#Ê“íí:é‘®'ãzس3Ѱr˜×sLÎkcÄãÍgàñãœfFöqlã̂íO@ó‹11æÿ¸1òÐÏç±=æê¬CP Sô‹Cü·:Ä»Ï`>ÿ¸®(aL3þbÅ_¬øÿЗÔ@x?Eô7åqL ¬ˆö ¤m4Êþ¼XÒ(i2h—û‹ØFUZûl’GGΣ&Û¦ám‚‰¡ËÓ*¹ì1µõÍ<-î›ÿ,)Ö¾³þ]-Àw¹l‰ºÔÃ¥ñXhGÄeä³ß~bdTb°÷}æd€Öo1EææÍ¤ä8߈“¸fæ>~º0"º€h“wƒÉ» É;²ñtATß•…±®ÒÐÝdMæ5³¼N«?²U:7%t†«k\;‘ Ýl'hÝõHOé‡]ž­²&òÏ÷i*oÒ@ì•+XT—¹Õ÷7›ÐØë´ÊŸüàùðV§%¿‚®Ï•(6Iæò>áWl(s[ÇÁOöµ×á6»wÏÔ*}ÜgU›pz’<©îÛžm¹/äå]à’nË*(¾qPÕù¡D–L‹(cºÊp)WIž»¯^b¯,¿nëpðÍû Z´ŸœïYa ÛÀ6)ô€'çhZLóè¿xòÎf³À°_|Ú´N £Ôè”îË ^¼Ï `p?g»ªµùªÉÒúõ±B—ú”B×Í&m#ýÕMX´²pfÔ.j°‹¼õŠ<©ëáòðhµ¯›uE£ æQcƒÌ º Ã/!ŠTL¤¨ ˦>ì;7I=Wƒ4ŒÄýÎò÷ÙQ8aœ¶$upEÇ´¯oÖèïœFoNV<)¶µ=SòdqGqDjjI‹ ´ÓðÜjn<© h‘(®Gƒib9ì=Õ_æCz"i§çØÏáq»Fo„´ºvÄÿ4eÞájŒLq»Ó„µ¸ê6!ˆÀÝ’]²j£)4¦™)XF4Ÿn·#]h¢­öºPc]L|D¯ ÕÊÅä¬öÁf˜|¦öÕ‰¥6Ä1€Æm?á¬Xå{p—µiè¸õ©ÛŒ@E·{Pw' ðTƒ¾ROçÁûúE"fYç%n%(·D°ÉR 8¢SŽàÓIÀÛÎüW;‡>ið‚Î×ø³ â΢ö W©ˆ6æ3,9DHL—<Žgç᚟aÉ´FF6‚@ØP?¹´õ±Óm\\ÅΔÜ~ƒnÑ¡^«TïÀ›ô¬,îmî뤪 $‘*rðÿª)Àúè‘O í>G8bVt ´ƒÃ3LÞØ>†m]v´8ŠpPðÇ/NPGY…<@‘“@¸%y'r'~h»Cü»ÛçIŸ9ÖÙŸ³ÆM%À‚åÓzq]Ӽ˘û·aÝýÃ6 1©`1ÀÔ ‚”½ ú©nÒmˆ¶ dçJ°ð®*·Á—Š6Ì*üqÿzx5âˆ>c-Üvîw$´îÖ´»±èì ™a¸ß‡D#ˆ Ñ'€ä?çæ¥H t<æìb ’óκ6ü0É$.Æ' äLYGX3-ë`—»Î¿§Ê:Ž`TÈÖF×€E]ÆÜÒÙ3wj˜¡ ®Ó^Œ‹"é âö4f2]­:Tª“f_]HÄ´Ö³Ñh½×PvTÒæ\ Ð y€›ÉÞÅ·¡„©$óuƒx¸ÐëzÛ 0f>ìÄWMx7JD.ÖÈg&ú„¡Œl)À§~ÆB™Æo- ÞÕµï¸)ÂëuV¯²]žéË&SÀs3ôÄÓvXäf;Ü‚b6جá!i‰N¢>u%sP,º{˜¤v‹ÂÚX®ÅmOí&ä”–*ÌÃÙØÓ:¤±„2=žrŸ¾¹?6ú#@À¸å–ÚDX¯uuchß&~)ðI{iÖM»`Æ÷8ƒ„ŽðÆDûÖ=C#PÍj"ú~?¢aÓïj>}×XõËsϹJWiÖÕeá•‹á»ÕFÙ Á|¸!1·#_;]™‚ø[zRD)û›x)Ö.ý®â ÂuŒ Y›R0¦h|«3Z|È·®òŽNCitÙå™ÌÅ–]žéx g<Ì—ñgb<"&ÊÒc¶j–I[È\Wå.€ñzþ&!¯Ži¸InA}ÿîÇŸo®ûs–aÀ2"](PS%+qäå˜ç2ÐWp6Ë’Ú‰ÚÞK3e*60­œâ±,TÝ£±né´Ut¤ruiåÂüñ¥èUSVs·©€nt¢ÇïnÞ㬷Y6¸wȴ³’ÑØ«²¨3@NWKíK«³UB+;>N+0‘AZxƒ— Ï]³e}Q¡¹º#øíOÔÜã$Rv›ó†o»ížI}Pé Ö(Dì¬qÛ™!ö¸X‰[uÃc½Jò¤ÂH\ig.øÎÑÀË¡¹8n¡ßGßÐ8¨g8–]=clÓœ1œœªgÀ–Lh)d^ÊûÐQq‡3¶/Â3-Æ}…¨§"eãÏì€n•Ôé¼Ó)w{R@PÀû"eWin»£FdPiW¡ÒâÄp•Ón€æ / ¾¦0œŸøÚ\ùeäcB¦ÎçÕ$nïññëP‚ÚoÇþ£`Àñͱ›ëæÜ ÷èz;™…c 8kqÊxy6ãû'G|î]ùÓð¹âËÉjüé0/ÞÑ}h/ÿ.ÞÅÏ endstream endobj 636 0 obj << /Length 2963 /Filter /FlateDecode >> stream xÚ½ZÛ’Û¸}÷WÌ#U±âì”—7µÙò%ö8•ªÝ} %Úñ$NDÊãݯO7^ ºØ³©©‘ 4ݧO7H¯rø£W6¿Òœ+ÌÕbý$w­ÛOWþâí?žÐÐo磞¿yò×¥¼¢9±¹¥W7ÇCÝ,¯~Éd>ûíæŸWÜXb´…Q\ëw宬6ŸðÙ“7ý’±3%Áž¢(6…RCÌ•2‚P.ü¼ÏqBYûI¢™î$û5—ùgøGCÏhq’Â"x×uQÜ‹ª1“ý>›s£³ú#þª¬)·_ªEéå»´åÖ©x$$ƒéu?ýçÔ´Šä°ÚÐƒÌæ*ÙÍm7üž*«6‹ÕnY6þù‡ÙÕí­Øvï}ØýšSB¹æb³tû4§œm-^*ý”¸ßuæ"k`Æ2,&Ҹʉ6¦“tý}ʦšP3^¶¸ìÓÙׯyX \ŒÓËçTMJNTºRªû«˜§†c /ÿ¤e'æ›s°l™Ø$K¨»ôæ¬y«§wçYw»-6MÕVõÆkò~[(>T«ÁÔ ñã¶^÷&ͽÉÏæ4K›½µ„+ÑMV¥äф۾G[û¡Góˆ®e(NÝwÉ%Jõ ]Ëœ˜Ü]‹GÙãXÓn »5þ÷Ίv,òÜÁ þþ×ø†¢íxÓÌëDäôÜh.j/ƒ!³Wu ³„)Ú[ åþ”HªNú™Ð˜ÃØ©@ítÔ•É´'Êè78rjá ä½üë° e±@Þ†Wll¹&L逗ôˆZA©#8£ÙOSƒ‚w«aÖI”`Då}— ñ±¬^Wm[.ŸâÈŠÕÊ7>7ƒ}„—ŠmxR4Ín].ýó7ø½-°·7¿Ð- á{U„á‚WÄë5ŸÚAA˜`ß‚žy Hn'·Û‰¯ ZžqÏsÒ1øH¶ulTX¾òˆazýþæÍû›w) ä¡§ö=ß?*G9Šœ!ÅÑ5[¢d»ðÿƒB,Õ5åq\zû˜ëٖͽ'4›&›¶Z‡pÐ…ªÃX¤'ñP2‚—go{z݌‚¨ˆþ¯Ç\øÈ ·Å'X“y:ràŒLØl±kÚzí\›«ov¼ zM¹ÎLŽÚ ã‚H®ÎOC«Àcx²Rý±„"ÆöÖ×K½õ¡ˆBÑ]5­Gf9°Ñ×*6‹ôJMT¼}ÿyÌíko·õîÓíý®õ²¸Lá2:C¹!9¿ØR÷À‰å<šÇàôêõÍ‹w©šðÑ ŸtXÛ3lk²E½¾_•_‘jG ¡Í­Î¢¹È-vZW,Kxb zŠ~hj½•¼N ‡QRŽ÷Âw¢@Ë*¦†è¢‰ÎMä”4eYÍÇ8Àdp½~vÖ„É.±’‚ÆÅèE/öðù,Mçs"A} ‚??„|?ò=&‰ «°H4ˆâúˆhHzG}þ>£TF;¯(O‘Òh–É’Žª ºùðÜ0¬" 1\QÌ€|Ð1æÁø'é$Ñ,®M]š‰ÅãÍ©û¨Ã8À7ÇijÌë“ Pi¸Ü÷º>£á‡œlðµWÓäUËîQJŸt+}9y=ÐãŒ(¶wâô]u‰ä(JÕÿ6.߈|tZ!ÞÕrÈT1G‡†BWË‘®ª±GXÜì·A¦ƒ:SRPߌÔ[FO«òø¹0úʳb §àøŠMÄ«äD’H­.·´yX€ÎãVNPH}…+‘6Šeo¸Ï©HÐG*wO†hÊQµÇrÕk䈵3m&Y»R†GYïÀÚGÙ:,ÔgX[2scÀ:è©,I%â#Y’°æxÞÆH>.×3ÐcKt·‰ÁCÞætÖ숷·þnôÑ´Y±%•Î}gú#@2³&¬û*/zûEžÚÑX×aF}É?–ô?G’ h =š/ ~á°£,ÈÍ2dAlüi©¤§s‘95°·®²3Òè%™ÏºFUôçj=äã/ÐܹIR‹É9™ ñÿ_2ths`œª0ÿý¸¤ÿeYt\ßPÒÜIÕ<>^íØû—ª©:fpšyŒRò[™GGèO”QÝ—~*ƒ_wÿˆ$'ù endstream endobj 639 0 obj << /Length 3165 /Filter /FlateDecode >> stream xÚå[moܸþž_á2šÕñM$÷ ´ASÜmïÅW¸Üy-ÛÊí®I›\úë;ÉÒR+9Iû¡EK+QÃáðáÌ3C†^øG/rr¡8Os¡/¶ûgÄ]Ù\n8çIöâr#D–|,eu¸·OÿVv—L'ðOÝüÚ^n˜È•N2zùËõ·Ïþ|Ý÷Ÿ1¶RQlyª©šh*µH)VÓ¿ÖбNnËUëïÇîñص¨ÃW¯$?+Ð<¥šÛ/²m(LsÅ56Q©€ž74•\ÙVÛ«_m»±Á2’ÒŒ] êª]õ¯¢«êh"xRßÙk[6ï«m‰?D²-h0´mDCʳaFûÍS%µoqƒ¢>Ú^¶»¢ŽZÀ­þ“mL¨N…”¾ES¾;–mצ0éJ$×NócwI“ÑERµ¶óÛò ¡âPÞÚŸ…Q­-R¦Ðž¬E­üÎä:¹kŠ­¿ŒµxžtÕÞ½¯Ü›Õú`ºïsP´­ÍÖ·níõæØ~´woHFª´LŸ£RdèçåYxçý—…Ò¶l[D9Œu÷¶Ñí£Eò™e™ 497¹` Íó…ÙÕ„ùÖ¸*)l¨Ó®ÜŒ´‡·uc_ï/™JŽ0E»®j.a;™ü:AsdÆû†8eE¨ £2e´×ö a" Xš*Yµ¢ädE{¤"%¹¾Ž­d:í aÀÆe–æ4sfß™É!daÕ }²…‰a9M H-ö @¥‰YUWÚG£Y‚ß½õíO„&x¬Â¯ß‘Š.œ$"í$E4f4K³KŸåÉŒÝóГݖ‡º+Ý qÙØ¯ôÈÿ©4ë=U×\f4)Àrë&CÈ4ct¼zªCWÚªûSCÀìeýˆŠºé–µT#‹¨«ƒ¸ 3þ‰h<± ¬î_GñÏR*z;ü3Òcž>‡ÿ±(’j6Âÿq2•ù*ýO¤]åtf½ªD7êM»-Ð_Øgîæ8Šeð`ßC~Ü–URÚ™f„¥ÄèÌô}S=}èÌBá"©eúÐ$mp–nåþ»NÄîƒyÊ© ÿG·‹{³G³$ëƒ=.6yàeù›}W6¬lçØ)ÄN¸1„Ö}ì…ö³±—‘`¤‚/‘Ù4øZ¹ÆúÐ×À °³ó ‚AÈ-Ⱦወã†f:·NŽ:'§½O†XèÚ?øg,Íu>ÿì÷}¥¹1_ù±>ÃÕaîÀJ BGο`J³,ÏF%œcL‘y@Æ'ÆÛ`½]Œ†swAæ½aÔTçm`Ñø|ˆ×>ÄM•RÈÄ Wo±×1­8è¾F+%¸Ñ 7‡lUÿT+æÂ³WBx1n_?Å™5—œ&WUtƒ-¥R…“ô]4_!$*ñªŸûé^ èJ½‚uÅW6ƒ!tâ2ã@|C” "_àEÚ‹ò—+ûð%^|÷3[(lˆ _²ï×®J.y3í6±jaI¿°z)^–k@­ÝïømÈ@ãÚ8…àq—Ž/òô6î÷è°#þeç(Òx5–ÈT7Œ6g¤}x(›2ê·¾»ñë‚ýðœDè¶âVct\¬#1åB*ÞÌæ°Ø\.Ø(:¤w0šÃÖÉm;S¯ÁšÉÕ¾ÚÍî£ë½vÌ~v¨ˆ¹Ý÷ç9$@~èÕeI׸-FÓ²[²G ˆH¹šl[˜xÍ´ê©ÞÛò]WùNáÙáô, ~…Œ„éaÃËühëM㣽šqYùÚÈÜU[ÐÐÄú¶±QÛur<ìJ¯Æ‡°©¡€Ö |ì4Bí }ùMe¬ Êe=­,‹-Šðé¦#gxožXQtÉ¢3MPøö»¾$éÓKÏÊlOˆÔã’¤ÛžϧP`•¤TÉ)[Ä<Ø•'Ú§32Jb(˜¡¡jïððƒ¸k\4eXÆì™š+cJXž "‡ˆ©ŸæÛ–Hƒ\ù|wM1b;$µ \u5§R–BŽªô»8eÀ¿<ÑgyŒXÍcÔá1lÉ¿Ïá»xŒ\Åc `rT;œü’¿œÄeùcÇp€ Kq™™<÷ü:«Ö)]\§Ð^Ž\‡ÝOg~Û›áiµ›â¦ÚU?ˆ`Þšì1§öl<)ƒôð`·ÆÙt¯œ%÷6À”^zm¯ÃÞ üXH31" û·oãé.È器‹“Ž¡f/¦iX\’6ïfÒi-ù¤ü äCeO€Åø $®ƒ·|CX¶*÷˜÷ªDñ)ÓÂSf¶—Á4àãÑ4àk»‰¯°Œ×ùr°>{WÛÃkTÛû6ù6ÇãnøÞP;ŒšcKƒç¸_K {ˆM­ hÝI=c˜‡Søtýs7<à ªÌ7’&a6Í‘ã¾ÕZiQ¿ â ]Pa>·µ¼"‡§Î!ÜÑ®ÃS5;w2:p|zlI$`ðyO³¢ÇiNSÁþ[>>£O¤OËKyjÛ“Ú1ÖîÂNçPéêÇý©d¹ ð “èÑÜâgCs‡íÀÉ_U»ò'S¢ cÅG}ŽÝ‡Éin<É­_ûPuÑM)ÃózÆéJÝ3†ñÙ“Êû´9Fíyè­¢å"È(XpBjt`ÑååÐ=8„ÿËæßUi° endstream endobj 645 0 obj << /Length 2385 /Filter /FlateDecode >> stream xÚíZÝsÛ¸Ï_¡GjÆÂ_Ñ̽œ{î¤×Þ¹±’¹™4´L[L$ÑGRIüßwIõ‘KÛg,r .‹ß~‚tÃéx¦8'Z¤³ÕöEl¨ÕÃÌ^¼þÛ êÆ-`àÂùÓòÅWRÎhLt¬élyï³ZÞÍÞE’Íß/ÿ>ã©&©ÒÀÅPÿØçû¼Ø=à³?/» $c'J‚#¿Eù¢Pš’t–¤‚P.켯~½~³¼ÁY¸J˜?FÑ’Û×vŒLü1’(¦Ú%ü;–quQ\Ôà’ºñ]H kæÀ˜*©}í±*o³ÛbS4s–FOóW"jÖYƒW<Ê,aµÉêډɇk’$•¬¢ M« i7"]×eûy]¬pÚµ›¥Ü>nò&¿³s×yõ©XåöYæ^Yå;|£É«8,–„õÛZ„ÄQ$å²aV5[pž–(§'j¹·²p5%þ›> Šãý!4{J”투¶Ü3Ç|JË"%qÒ¾TO±©˜ÌBˆèrƒ³ÐÈMU.«s„»!µ>ÛlJ|òÿåw$Ë‹9‘L9tŠá¶Fçê.Û-ÙÝå_æ –ÆQyo'“H’Èn’Ux»Uˆ*¿Ï«|‡ B¾u“5E¹»î¥ ŒÓƒÀ¬1é¯0¸w„ vPBŠ¢§£D —Áz1_¥Ñ}ˆ¤êUBC"I"d'÷KG¢¢¿àObTûóÒ ÄaaiÚryëGôX¿™5‚‹£‚$©îUÀDØ×IåH•c-)IÏãs6'©:¢!1-×ù4ÂÁ·3=ð"« þ²3èOE] w“ <àÞú¼¥Öë=¡1Ê*d“Z•¨1R¿Ñ%1UP³1¨;4¾=mÆ‹ª›xjrÁ„¦S0ë7 ô±*v@*rŽÌüÖ“}^çN­â(îÖf§:†x%‡1pàDëð†÷ª¯íæó¥%<î«G¼ŠÊ:¯ÁnÕf½…‡Mm™5kˆ)ëÇ}ã8:ài¿ÅPcf(-ñÖpµrÇC„"OtT?ÕM¾µ×=ó •*Êvwö‰ÇɃ÷™ýùPÞâE ëoöÕÎÆdT¶ Ý,ž~̤N?¾`]4]pá­‡ ·@\gnïpQ†âÇ{¸-w¹}cõ´Úä¸sü5¿Ïö›Æ>hù[–h.»º¸«0Ônßð††ôÖÆ[»2yþʸÏnî˪‹‹–b ?¯]`&w ©H2ÌÙ~{³<–݉ó,¨8-‚ËØoñ¿Qe€ñWdzÓ=Ø<$ãØ|3l¾iÌúU~ ÷ÿÙT¦6ñùÛYæáïÀèÓ3Š3ØE(¥B§Šûø?Æ$¬P endstream endobj 651 0 obj << /Length 2968 /Filter /FlateDecode >> stream xÚ½ZmsÛ¸þž_áé'ºcÁÄ;˜k;Óúœ\®=çÅNç¦w7F¢-Æ©T߯ï.¾’ì\¦£‘A¼,žÝ}vAzÃ%ñ‘æœ$ÂÍ×Ïb[[ݹ›w/ŸQßn gƒ–ÿ¸zvúBÊ#“$NèÑÕõ°««ÅÑ/ÑÙ2Ý4Yu<ãœGòùñL½ÝfÛ,/n\íEÖ3Ýá_YÝÖÇ3&m"É»úñÙùU7¾dì‘Å–fªØp¦”bŽ”„rá&{‰Š԰$šièÕ¶ø5–ñüä.Ô·­^Rb4o¯³´€ÅHÕYõ9Ÿg®Ðäk{§¢òÚÕÌWi]»þÍ‘q+ñýÍCCj"cÙµØÖM¹ÎªÚõ[úᛥp4yV ÈqwBC C4WmÏ·¡±A€±ŠÆw4’³ Lt"y’„ÿ‡1‰“AkJ°Õ@ÉýÌ('TºÇ/Ž L9œ½ÀÕž½¸t¥¢)˜h‘Õ'X!üná£NJXÀݪ} ì$ì|°ïûV¸ƒÇ3Õ³¼XS¬¦ÑZè(+^Ð$$ž™ÔDÍXL”¡nÖÿþ¶0üœ×9ÎYò¨J›¼t·ˆ=.Ùnìʳ{†H€vßøazYBáâ@]™{—ÀÂè“÷ÂTbØ–3Â4ë3ê‘2B{MÃsçŠ?.´Ò“Žt§S¯®àî­mÜz SM( ÜÝcfƒ»è»Ì=^Óêf»ö"?éqêŸÖwy3ÇgËÎçu«ïaµ*;Ûœ-‰ß7yu’ŸÔ'`x¼Èªü~ÈW¹u÷àLTëMw—ºËk ¦ƒŠvUhX¸å¢CØÇòƒï³\oVYc%…åÖv\?¾…·Þ oÅHbÚžóöTwøÇÍÀ^«rÛ8ÑÃÖÇF:ŠÕ´ä9€™|Ãð¬­všú¾w‰T‚Dû)×»ú 4ˆz&ˆî…= ÛÂÞ<ÂqR\ûÎ’ñ‚S¤xPì:$€rwÊCxåР`Í­~@m^»mïi}ãÐÕUe, .Á0u‹ü¹Š–%ãÞúlÿ+œÜ@p;°¹'µ«è–>87ã ¿À¿d‹Xz_ƒî¯yÏ Ðïžf}¿®…u‰]¢G››ïmûln·´õ£ ÀN‹ jj¨X\qØâÒƒ÷ºå(×”9‘ìõ>ŠÄŒ,øÄ"RP6 hdŸ,“}.Ýbkaài®IçÕ™ôÑ2X6 ¯‡]°àì º‰1C… ¶RÉ×€ÂîÓ_œ¢;T)éY :7Ë´ö,ϧì¹èéLÞÊÍ]Ù*EyÞ?¢-ãÌ_]âÔ¿óB€ §ºS¯îò^BRFÈz7^ªìf»J+WøÔEJØrà`lŒÔ2$xÆÀ'÷ŽîBôhGIÆ6_Ó$ú>»N·«Æ/ªªZL*õXOFÄ_÷!v¯'ßZÙƒN =öŠN‰>â}ýþêÍû«ËbßR»–ï¿-Ïï”p¬Ò”P­à>af|i,ðáÒK=îQå”ÀȲª> PªÎíï\©yäJ„K1¢ kí´vÒ¬'9Ã(Ö{Û¹üƒ¤Âõì¢$sÀl¼)QI2†÷£¬§¤tׯ%DKzhãÆ2#b'®¢W—®Ü…¹vÃèÎ KÀ×+yp¿ôö«ç›íäü†©½K5Ý03 :{ÝTÇ’F)05‡®µšÓd¼÷Ád‰&¦ÇÜ"³Œ¨#× *JMØu´gЂ'~Š´þêœÓ€©üá4P÷©›]$E‚‡Òc’òîÛZ¤ÛÌ@/æ’ž WY½±8. ôžÜ´Y4¼³ÔƨCÔ†*’ô{ö(åTq]-ý06¿s_7ÙÚ•÷ÎÉù³éÔ@ Ÿ¨½2˜qp0FOìJ•Q®«Ï]ÖJôa0^µa£s‚u@‹Ï^”Í.rÏØmÉIÐÂÄÅã³2>aÁvb|4ù0ƆÜjBÄß~[Œ§ˆ9ψÒ»ýÉ~n¼?1{<³ßã~—fHÙkFèÖ©‚9‰0 1R>Q’VÌÓ—ì(1Äøñ4£³ÛBH ãê€xÏ×ÇJ‘{pSºNqƒÉð¢]7oƒ#Q Ó¼sÅó6O<Ηk—ó¥Q«xb‡â%à„ 9$·õv½3ÆÖC/ñö+Th¢\¸€Ÿÿ_.à‰Ü,«r{³«æmš¿HºÅ#Oý¬‡ˆ>‹¡ Ç<ÿâõÕùe¨?`ù˜„õÉ,ab‡E¼¹ÞsÇ0±4wi¸óî$›çHKðÐaôšOãã­Mã×!43ÜJ9µ²©‚ë@DRÝf¾ì,Æia¬jcº±PŬ·"˜2ÇŽqï9Æ92T<+óbÀe¾òv‚ CâDM’œV T …%/ÏH“Á‘˜+§•ÍTÄHu@8skÖ°Œ)glÐ@,øÌ£Ã¥i2ÎDa…ÍGB—Rñò&Ïëçñ(½êRž«&߬²Qâ’CWiö:¹É pI+W»*ÓÅl‘y­êNá\ËÁp®Â._s‡8óíÆ¼ Vn3]qtQâÂð±;wÀ7eÃÓþø·;Z±ŽÌû&­`ïSë+²ÎhM]’fSWéÀ«.Ò`¸eˆ6ãÆ\ .ð¬òKu•×:*;¥¢%‹iÝv–í’dSV®Í~e#×ç¶ó0˦Bc>6ˆïÎ_œ¿;¿8k­ç8ù‹§ŽÒ¿À[‡CuÐ-3°uÖ/,¸Ó °À}O𪢥¿»{}{ ¡gŠ^1Ñå²p ÿ“.ËêcZø/ý{—ó²i\‹—UºL×þ¹Öþ3+Š6—Þ,ÝKgÄ=»t¹üy~{Úá RÞnS‡Í¼ËþÙ[G®ytÙZ€á±‡Ðbóì9˜n&¢3Çô«i{ý½HW÷µ¼ý¾vX„ÝçÕlò-~jÏVõŽ šÒa.–%ñaºæy)T‚`,‰‚v6„u©+Ïý~Úf-©i "<œø@‹í±Øc¬l}¦n$û’ΛÕ}Èáp`“{ƒ ©4ôÁÇ<ÈÍ•ˆ.G¡ ²î{T\ŒbÝt.‹F(p1©»t‹…û‹EOtᮃƒ¬qüVÉηœgÎÁ &Ó™·–ø6zë? endstream endobj 659 0 obj << /Length 2827 /Filter /FlateDecode >> stream xÚ½koÜ6ò{~Å~”‹ßTs= —:­ $Mc·\[Ê®lë¢ÇFÒæqî·ß I=Íõ¦-®0°¢Èáp8ï™nø£›4ÙhÎI*Ìf[=Iìl{·qƒ×ß<¡.Àxù›'Ï¥ÜЄ¤IJ77·sT7»ÍÏ‘g¿Þ|·á&%F§€Åξ;䇼¨ïpíÉåÍx€dì3)AȤPjˆÙ(#å»-³®Ë»ó³˜3}¸ÏÛ‡IÔOà @ÖÅsÅ–Ø1J7xé`¤šÃH¢ÙñK"“-üP¹ %Di:€Z²ü¡|&‰`#×¶!L†0:"jsàl×ÌB8%òcØð6„R‘„qU|ô@銴$‘Ô´¼&#”Ôçpˆ,š=±÷YøªRñ®¨òº+š:+Ú÷gÌDù¶oZ«r1‡­’™ML9¡ÒíúPô÷Í9J"ºmÊ3•ÍÓ° :i—÷m³?‹aÛy÷EHÜ̦€_Ãþ¬,Qîg ŸÒ2Åþþ¥{úyTЧ–ÆdA\xóßüæ—Ç6S·»;TÝVíèKçíÓ8ãùehêP:#¼™¾írM„`0m-ðç_“Í0"ô情¬6¸ŽÊTn®ŸüàÍtq2àS‹*â”>±II¬>qTs+È*ë[¼6NY9´Ì$„§âQ-£pA¶My¨jkP€¶;lQMFÊz7ʳ-*ß½#¤mðåƒ[jó}›wyûú9ÁVJz±s¯pgâ Ò Ñ ³¥ E»zùêÇ›ë£Bµ0Dóˆ…KMÔpÃëâ?¹# ¹uô{Óàƒ;É'êY·Íʬ=ºJÅOÖ>F‰Eœ \‰ÉU220ºpIð&+—KIˆ¢˜ M(ØÙ‚5Ò‡ÃYF·¬Qæ‡ ßxDZäêQ'¯õüÈ#NžK½vò½µùÀ•…"’ª“2à3ˆÓ2œLà@°Mþ®øHIÔ$º2 L„ñõëûo>Ó,öÍþ·ÉÉ,¨ ™î·-ÎêˤK?TAUAõqEç$Ì£z‚3•õ±µÃŽÆR2P1EârN´ïcœD|C 8”YÁÖMZW«TG7è+ðü#×ÖxmŽ©¾J¹ˆx€'÷z\tAYP¢ø¨Åmó¡;ª~fyJ¼ôs´pTU2Ü€•.5î „Ê¤Ž>¡oîSHX¡'zÈ-ÅE®Y/‹#ç´åœ¶œCǹ‰ˆÒ(ùû28ä²EY—ŸÎŒˆÎñ ŽT›‘êmæ);tž2O¢‰nõ…òÂ÷äÊßÕÕûlïR†5US ³`ê³IB¨^¦!¯/Ÿ_¾¾|ùìò:äÅ ”r¹á—„ê#¡]É‘sßæ-ð[Ò4ºöQÝFmTݾÊêóPš”¢Ï•çªÚ—y•;!ÛÔQºZ¡}‘#Gqê'äyVr÷úUy×´¡Tî2V;p;ಎÞ3ª.wèÂËXgbÒè‡$¯°‹Fã €Ò‚Ë/óÞß ´³……·nþEcmt——]Q4}Š8çHØú™TÇe:u±Å¼q½Î½hûu=Ç %RÑàh9ìDM7@Ç3ð@]·FjI4IÌ¥tM.âå 3 ï¾ï÷_¿àb‹Ç®Ùv82 ¢v¢,Þ¸÷ Pü.²?´;”/Ç]"Êw_àÏŒ{ï_EÄŒrã †*ÂŒ\{§9OøÑ|“€]úã< ãx€§k¤ƒØ97Ñ×ù>kûʧ°8§}R££gMµ?ô.Õ1Ñ5(ØÖª`^o]™ ³¯ÎüuáÊ´6ö>•c‘¦W¥LaµöêÛùо/:—ˆŠè9šSþ¦=dí'·Lå¹[¢©aƒ˜@JË oƒ&êÊâΚ{îÐÎì pÜ6¨óȽ[€Bð ¹{Ákã3÷>;o3g÷8 åÀŒûr0ÆpY¯(Ô1ëäL€ÛN57.ü(‘ÆÆ4 DCˆ¸^ðOÔS8SéõZ)÷ÐÃã©›ô§ÑdvKAúlqÞË z&@·˜h+"[ù lEäЧ¬¤Š)Ÿ‹rPjÈsï¡_ˆÀr¢ÄÀL]$*«¡\n¤+lÁÀ¶‡,‘’C±:ƒú2sÁãÐÇCnÌS(1´^Vôõ.(ÿjíu}tŒz½ä„S¯TRòø4–„»ÀÃR)Ket‡Æ©Q»D+ALÂN‰ä¢î1RÜÉ÷Yç>wÌk÷ºË»m[ø´hçæ ¿vMü3pŒÙTIpã‰Îe9«…Ý.ÇÁU½+Àiyß‘‚’™té–,»µìÂb*óøÂ£ëCUeý”$­Üº|RÌâ©_u¨÷‡7eÑÝãÍa;x½½0T™á]» (3ðGžŽf‰LÕ†C ®’SÁa€Žgà.8¬’ð%Òyø‡r1ûÍÚ¬î?fvŒH«ð/#_5ž8çë!«HÞ]ü·ë`3Hñâ$G  ‹ºéa¾SÊüÖ ì%ûÝíƒ4#M d.à)Oe8ž ÝõÃæ1çh[>z\ç¾-’•]óűwªàÞÕÛªÊ'wf´Í@16Qémöççç Ãvõžð¼(ó_§*‡’T¢¯»u’šõV¾òœ Ò\9Ù¡oû9j†Ä\% ÓÆ&ò¼æNBg Â_Õ÷+rÄV0ðNÚÏ6u×·‡­«zíªMèìØ¹\X†ʾp-;÷â§3Jiô•{˦J‰iŒL;,Ø8-]³u9X€Ï±ÒDÐUåô6ÜXQSïcP ß™è›U[2EÑv}X !r§S«.ÜÌ3jùé'ïŽ4~ØÜº>ÝùMÿ²ö¦Ópgx‘8Øz2óªûHÓ0èoÞÂ[ÞhkÝ'(§*.R3—ÑÛ妷ß@1Ž£I°F.Yhµ°©¢^}#ªÇ2zðDG;VFÉ=ÿEíRýxO…jIRp7°Uú§]ÇR“ÜW@Ÿxá ØÿÂ…°óÄê ²G¬Yªtöi2´l`d½¼†øÙ¹×‰Ïð1Ò~‘~>9“sñ ‘ªa•93Ó¿G<Ž‹éŸu8”$©^ÊÿÿÔ~ûWvß´ÿÆ>Ä5}G0ò2[2Á€GÿÄ"¿©ïüú% æöœÏ#©s°¹h§5|œÅN†KŸqzü/»øÐÆa²j¬F}2“;p™Àv‹ÒlÏGþëv>ð5«³òSW„ÛmLÆÅdűÁŠâê›—7¯¯ž]; ¯\ãªÊC\ú3üëëü½Q¬ðä1ÜmE½Î÷CÛ·¸M EÆ,Å~š‘˜Áƒßüúû«M(. ³Y'#PhByèxjB­:ºB©4¡‰b)Ô RhõOr´ÑGI™U§OÙþÛø»k û$ö7ÛV³·¦½›AR(RóKHŒ_ó]&WÚÍãÇŠÖI­ }´Í±ß@)Ÿ2'ìã úhM£S Býá’¦šjÑs|÷µê~ø|—ø\ø§ endstream endobj 667 0 obj << /Length 2724 /Filter /FlateDecode >> stream xÚíkoÜ6ò{~…?j‹Ç§ |@¯89´»Aqm>(ZÚV£Ýu$­Sßýù›!)‰’¹»vbà®W#€E‘ÔÌpÞ3ܰ# ÿØQNR!H.³£rõ‚šÙæêÈÞ~ÿ‚¹}1lŒ½»xñ—S¥Ž%9ÍÙÑÅ¥êbyôKôÝuqÓéf !"õÍ"–REo¶z««õ•}­»Ï¢ÏøgÓ|l1—yšEJ-Þ_üãÅß/üŠóŠ;P*'‚Š£$“„ iÉýåt‘‰h».»j³¶äVµ~”€äˆ1’+Å@, ºoí¦„û›ÂÓ¤ßñS îHûÇ!Œ¥4owIäÍSùù ÷ „ŠNìãÓº\­n ˜úÂH%‘¹ê?û•*B/ —ö×{þ¸#¤ ²aÇyˆrøf¤…9Lõa9%IªÆaêY{þ¼ÚsFúpïBç™Ð±S3Fh&²g |ÖÀ¯ÑÀ¯¢cõåZœ¤DQþ¬ÅÏZü%Z¬jqúh-þª³üs—%¤-AA¶Êò?HBÁBúlOf€qöå øÇJ(ž5ð[¿Ê7–„âY‹ÿÿµø¿”ZÇ,͉ºëÇmV7ÛN/bžÊ¨]Ä,ê,Ò8(–0º‹qØvE¿çY¤›ËM³*Ö¥›]é¢Ý6{u©Š`ÍN—õ¦ÕËcü$Êymë®*ë¢mí†OCçßÖØùK½ÎœN51Ým;4 »ký¨ gÅïЮ‹z«íë·ë¢¾kïZû†úöã»c,úÖ0ÉÌõÕ¦©ºëÐ¥D ‡nÚš´‡ßÔUYi´è, ­nn«Òá-õÏÐ馵«eOàË>÷­Ùug·l.'§ÀźÞ~TkÄÕ7N¨©/T —C˜Nœ8Oàw§ç!ù«”ø:BO«¦íbPÛá9¿×KÇ„Eå¶í`‡9G£¢±ÚãvØn·VkûÜ4KÓàÅá¥}MSÝ.TÌ~ 3 "+ür[Ç[Úºê¦R¨âlj¢1+!oL—8 È"Ne·ŽÊ‡[ºëÊ}õ±Z/í„3£ÞáÛ²jK@jØlT4V&4*ƒ# ¸Ò!uœˆ½«Væs§öŒmwOòh`1¥Q¥à0ZãQ:’rldsJ$TÖ=HÆgÍÆ -uÛ¾Ð4:¿.8º•±¤™/c\·<†y_À¸€Æù›¢öëÚÎ~p:Œ+…B­ç@šãÿtQâêµc‹£Är¬Ñ¥®nã³&$#ýi[Ôvª½6ÄâКÍg"™ü×!ÎrKÑ`>ñÙÛ‡p÷‡b—¡)5Z¯nºÊ΢²Ñè­n·+í¸ï>÷áÕrŸçŽq©å>¼÷ïÛJ£{û0ìæ½ñIjŸÎøÀxj;1JŒY‰qObÌ“˜]+ŒñÀ‚a-@y;·6¶]º±'ºnû}Î<1ã›Q«œÃÉÏ×7¨êÚŽê¢ë?i í¸5&‡~©ÿš§ŒkFç¸+ë–íð'@dÕ{îf{ƒÙáCíñÕƒìñÕúWÊäºÂh*X Ó8—Ë҉˅-VÃa°Ôua%ç´'{’õ.h¯ïìš1 |;aŽ^t³¸º#¦ÙE<vË•sz ÙL‘”½Þz†­>’»5ÞÒ9ÉÆ·i1šBÓ"›öŠÄ †¯^Ÿýtq>fT;£æë1ÃõDGRî×È´Ü•XEY:$¬ÁÓH'|ÚôÇR%|85y‡ƒS†På„Cöا“à uÛµ/CG” I”šgÑ>a"ý èËÆ­\…àAÙÀø@? ²ÊG A;c}uˆ/2þ>œ-×Ek®7öÙóɾM«û‚düKU"ÏŒ3˜XÔɉUà /æLU ¢†ÈÚZJ&l"-LJ[µƒ—÷ç0(ú¸ƒã*Ë ‡ÀX+"kà n·mÖmˆ; Æ (ÅýwÊžlžãcž}ÔRF‘jÞ}L$Ô7O5\ ^ñþü%Œ0^/¨„q"hÒ$!9ýýÓÊKyâ¹wÔ “»â´U:˜ÚiL(ÂdvÀ$é(‚щ3Œ($9%tìu†B¤áv‚§ „K>oá,À-ìÃï% [%Qéì6`mÉ]¢ç b§ JxÆç×jûý™1À¿ýDZϽ÷“Q£6vÒ¾¤~Km‰Þ†òGÆÀ¹òj÷þ„Œ`,ëºël±(6½„û©¹#´"šàæ}dG.SM¬Ü€ “+¤ï³öR›*Õ˜=yÁ\¬By?rŒcmXü`õîiƒÕ¼–¿£^¹­ðy[µ•I÷¼¹ÝÁ,É TíO»aÈîÇ2k=®8Ë@¶×Bùpì`FIn6¿Þ~›aLªvÖßA°õ½‘³ø=‘ÖxÝZdt®uˆ¡9ÔLl8þ¦Âeµá[¯'Aúÿ&óˆ¯h endstream endobj 673 0 obj << /Length 3628 /Filter /FlateDecode >> stream xÚÕ[ÛrÜÆ}×W°ô´L¸cÌ¢T%J¤RÛ²H9®Ø~€– ‰ PVíŸO÷ôຳÊJªRª€Áì\ºOwŸîùIÿøIX)Y¢â“ÕúQäZëëºyóò÷ý–Ðq9êùç‹G_½Ðú„G,‰~rq5êâòäÇ…6§?_üíDÆ ‹m£¸Ö›l“åå5¾{ô׋~-Ä‘+Áž[K1b¼ÎcŸ˜X1.Í»Æ aÉfÜO3+l·²Ÿ"½‡ÿ¸ï9Ùœæ° Ùu}uE}¦³&ÌF}—óÅ[óý!8£ˆ™‘¦ë|vºJ/Ú›¬„;!+¸ñ¢Íj¿9þ±‰˜NT÷ã÷¡ñc¦tß#ohÔ´i6ëì’ÚŠ®ïàb™ïA—ˬHqþû­Õ¸gÜÛ«sº/q˜~áª&šŠ “R 2‰¢Ð~`±±î:={ù,8TzeJ·#pæ0º”2f °ä’q½OÉœ3ÎÍghùÙ³à’¤bÒÈ‘š¥¶^ÍR‹E“ÕóU†‡tΣˆÉÄîU:˜¢±c¥ã)^g×›"­©­7S÷ä&¶¤^|ÆM— wqª¯O—0î³S­ûÛÄèü×N#Šè@áôònÿù‹ó³þ¥fÑ€ù‡!i“)’~ýL¹|ýö«EU‡&·š%Ö3¹:fr;Lþúœp “ËÅ‹¼L‹âþn*‰YäA”¢U |€ïûãq¾gîÑxºä‹ " R›½€„[Å#Döæ(Œ*? M‘0­ån¼­Cs*ÁïÕðk*Ø•5O†Ïwy{töš|†„ƒòåLļ—Â¥_C¾J ZºlÊê ­Xü%»J7E‹¯µ—Û–«’†ÅGD¤í5†]ÕRrÃÀýØK^U(()YºBqìO‰½@0,ýRYh;K)p_úd)"¦„gÿ:jW«ãâúª€ڀЙÞm¬B#Y– Î7û*ö¢h,eÄ݂ڛ¼|OoÛ|áòž†u¨˜\öƒw;õR ¸˜B“Сñ¸`\ôhŒ‚b‡8@¤ ˆ„=ºØ›‹üË‹já‹Û´N×Ù’ ]À\Èbèd{QrÏ’–ôPV-ݼstC"›Ù 6ƒ#t-÷(éjC·¨OלRC]mZ kжNÛ:ÿD/Ò†®zée“­ªò’îoOa¸l\P ƒÏ!ŒÍ¡ºÚ!Q%zó¡\­×Ó kŠØÀO¼h;µxàà¾@v :oß¾½xýöâ<„ È÷´Ôóíq:{(žòqÈé[=f!ˆ/jâ]kzñºl|}N×YºÇ+™ÚÅ\á³]õg›ØËEçSrܱމûv!‘÷rÿÍj„üI5W¢Ÿ"0dP2ާ†¹Û=‚÷ŽÌ^÷3÷b,ò_Ò6¯Ð¸-(ß2$šhXûXn’aàC‰“`KQ0c0LEc]ª0˜™2”·áÍ9aüÁ 1pˆ4Oa£Æî° Ù›c#H9!àl¯}6®½ŸY¤6r‡ÑBŒKŒ:d¸ƒ{ruçuøêœtØ[¥ý.@/…– ÿËû"À¶| lEnovbX£çާ\S l¶­O5…Ÿ"nVh¸Ñ"/Û¬lòö>ÈàǶ.ÂÝ-foB§@ÃC®r˜59’€àaQªÄ¸ˆs¤Anh€‘Eö󼉣{Ï‚*•‘efxÈп :¾I†|þ[ñ1ÍeÀ" ˜á+À0¸€‰ Ü­ÒYhúˆ‰EZl(þcK.@F«~ DGñ@ã;*‰ è¹.ôºÎRÇh'ié9–Ò,–jjfU™…I¶v 3ì7_–1ìãØVªADó~Ö:knÝö«U%Uì¨4ݹ€×%ð´#lŽ&ÈfãجŸf·71ÌXµ×àfz:o’5˜ú­Ü-úRN ¹ÁŒ2cwrx³Ê0íw'`ÙPÛ™KÞ‘]F÷ýy¸ ;dŠ#ë|þÅ]IíµAP¨ZJÑônEÆÀ÷’ Œ†¸ÞÜ7m¶¦1=@mPhò…¹;¡Îx#‡w —U»‹Ô 1.eÿY¸b=â€ß7$î“6z%vi€óq9ìsLÂ"­¦^ç»/ëuœÓô%”ô¦UÄ37k,[øwM/À¯»ëNTp¿{qBo}ØdMÛи.þ[9®«†¨.¹–©š,cãá³xxOvÚ‡Œa§$$gZš©á‹V»E‹i…,d/àeŒ8P„Ž„™–ü¶ì bRöšn6ë½fÐKù»£ÊñO4;Ãí„o Ï^¨(/TDP¨Øáƒ×Ýð‘¬'Y¡·àCm×áò’¼*Õ/€÷õžÃB¶àÍKÈ«³'r°Þ‡¹ž™±‘þwlDÙø€ã`ÜÞÔÕæúævƒ¡X…ãõpBË#PâC2ZD¤â>Љ=(ÓX¢æŸ½…•Kìàf(¸álÕz@rAnhÁN õ;ªÑLU˜cÕȾðÕa¾ðýƒF=‚/ pZ0Üò¸ªöÍ·= ˆÕAË”Lúr†Oo¥*Z\mÊ•/ƒ@ó*- j÷Ì!s%Ðü‹Æ\e ½ô6ž,>æoR[Õ”ÎÌ“iÅ K9[a~†OJ&0‰Ë*¨ŒŠëºËÛ¢ù†ª¨ÐÔ;;ûÀ€‡ÀÕÛ‡]ñì¾Â±ï\œ¾D ÷ÕŠÖÆïébÁ»ò ø^Ë¥/ë ákÈ({pQÝw4€X3;âŠûiÈdÔPší$ÓƒzÒÔÓÒŠÎ¥L´…µ šÿ¿ÚÒЦ- ¡mÙî{''õ5(¢‹ðï"m¸kSä×7îeáõ´®óPÞ¸–™;dλ ïŽIO"î½ÉÜ97&d-õ†0“ë?9>kë–¬“Å?oò"›õ#ëv·Þì®âÆIýÈÃA$<¬ó6K'ÐøÎcî‰Ã˜†K \BZÝÂ;2êRѸû*«?@áTˆ#ܵ¹’WHUMè*.ðjø, ÊÌÑcîsPøAZ¦Åý/~è"­¯»YŠªñŮق‡Xë˜ò Æ+ ú›â’îW°™üÒUˆ=Y 1>ûL,½ rbˆP¢·Ú®øqFÝÝÝäDúh² ›aî&½^…o>õŸä)‹dZ\^S".Çi–”#2ÒÖbñMÕõ»•|BJ?ioÒ6œhàÑê¸ÝëñWÃw¹+FÀ¤Ué’/‰<ÔåtsŸ.ãÛa«´Ú®‰Ü Ì>šMÑ6¬û#•ÿ‰]Å endstream endobj 678 0 obj << /Length 3264 /Filter /FlateDecode >> stream xÚíkoÜ6ò{~Åâ>É€—_"\H]»MÛIìæIƒƒ²–½ºìJI'퟿’zpÍ}¤É=>V$5çÅá M'1üÑIOç$z2[>ˆÍh}3±—?< n €Óäw—NÎ¥œÐ˜¤qJ'—×cT—W“7Ñé<[µy}4åœGòáÑT½Xçë¼(oìè³¼=b:ºÅŸª~ßM™H•ޤ:z{ùÓƒ³Ë~~ÉØ„"ä]JÕ˜RJ5Ñ“D B¹°Ä¾<;?{yöìôìg>9OÄø ÈädJ%Q4±üSeA}.PF‰-ÔSKÒqô2/d¶³òÊ6.ˆÿü%C>|ÄŸ¼7Ec{Õµ}ž.ª&w4<]/Úb†Sγ¢´c(£)Î+vsL)'TR;“Ÿì®øüH8ÑqOä1|¨iôSµ®4‹ÉÂg;Ïmã1â;}а’"?TT-€G*M#¦ •Ý€ë?^Õ…CHS»‰V+ÓqqÊÿàŒ‘M½¢"&b’F(U{4ËÂNGÀ+ðšEÃ[J…<ù©N>Ri à·XÆŽk‰¯¡ŠH•tl›·íêáÉÉUUl¶$U}sFc)‰µîPÁŒt“ "¥„ÇÉlè ÷1ÂùwFv9GUäiËÕ"_¢–ë¨ÍÚ¢*ݸy/£w™ÑPê^ý@ì«ïªÅ UbŽ"¦ÔXy_ƒ_Ék7ú£ƒ¾ÊíÛ§¹ñDÐ2懟È%ÚL]X»»*‚¶û0x1ˆžÁ4ºãÉRåL§Ïê÷敵póò-®A¿È BÛr=Z÷±ŠžÊêëª^få,·ƒgd‚¦î¸‡_ÜíÜØmG®sÄÕrµ¶žXðèbVä ¬fµ(Žh4ÃXL4 Ú1)Q12Iô÷b‘>Ò¢ëÓ4Õs†˜®lûìÊð%«¯, ßûü%û½BQÞ6ïÍb’Ÿªyi^góªî]‘%ÀÄ¿²Ò¸ nÔC°–Wµ­mþPgóléÞnâèÏyYæÀ'Ó9í¾ÊøgÅû øOˆL{¯þbYÍ-Pw­â8<Ÿ›6_B›Ç›b{h—Ñ¡ò–1HýWÈ<8ö~m dëí ZØ;cÕk Ô*(TP$¢êyg=¯a³ÜÎôc¶X¸—à\Å]/jl]J ž†îó¢v:¶Î#¹ë<:˜Á‚šÒèdô{{{kžÄüΚQç6kæÀ­£̯֣¯çÕ2oFý($(c6úЬ\ocÍà:ˆé«î ï®ÛÈ&R³rÔQ-£'Æ(T´ÊjÐÎz‘¡»ã°I6ynm§1¾hf,Ùê›J xI}}SDðÝ»÷ ®‰ÒýÎý—þ±¬ßYÎ>e³Ö¢¼¨kçÔ¡glnƒŒ²ø°Î›à–Ç¢Uºw>5ÞɈƒò»)UŠP†º¦Àe¤ü°ˆcxÔTCØ…$ZôËùPÎLœtl¿‚îr‰fýn¶ZÕÆ™½7¯‹¦hCׄie‚Á)‹³£ãÍ9²c]΃};ð„’TJfVÂ{-ïhzã‚S6J"…_Chb‚p@Ô*e?ÍËmH’/@òâ[ ùÇ^$o â—Ñ#û0RúÒq¨c/ŠW$ã@(–!úùŸ »Á—,B™ÉA\|¯BëñÄÚÅuwöí"xN½€à^ïUðϪà]êpËmjœìUc)înc÷z|¯ÇÿK=þ*:^ÿy[pßLÊüÿÚÛk êÞîmákq´Õ"$•žíïfÎÚzbœX’*zÒºI çê8Ô͋奻¹qXÓz¹<|;ÏÚó(“Ä„\Š$L{Ž“Æ`X©âÚV &Œ$Ü ‹£9áÀ±Ô( çå²BNίMb3IŠƒxl³ƒ¢Ê%˜ªÑ4 &ÉH,õå4D—g3Úx9 ³T‡¢Ãp<-·”_ ¬PîY!¦k? [˜,Ùq͉ŠMöÍÛxr/A+OõäÖ€.' lÎÑ.&^ØD­O8g”Æ&\qÒeölÆ4„rKà%wê‰*M¤›®|+±Ð$ŽÅ·ó¼ÎCÓp ¾?Ý9pY »q¸Ieø .yº(®ìèÊT'ªÕzÑÕapY|:ª05IÄnc „&É^c¨a›Ûf b¿1(’¦cét«5¥l\ïÊTð½R\`ØDÁdÒ˜ÛSnö3aUº í°4…EÛ>¦ ®f &ºàùG¨±,E»*¦©—ïÜs(c™•¡iS"UOØ#'Œ†Óv+. V€¹|ç%žDj O‘Po™>M’h`!8É=NoاJ«j§$©˜Œ Š¦ÛGÌ- ˆjñ¢Ž™­pm‰wFñ;¶â „­s,Ž´ýþšhb%w÷WAÃû+ŒJÐØ51ñÝ ÅŒbõ, °©ˆ"Úò·˜Š²À˜ ûn9Z±èÉ…™ݺ¡E>Á¢ ²«G:6Uåâ3†jÁ:Nì߸yòìù¯—C¼éj´/O¿¼ä•ªp³má¦7ì\{…¶ÝâÔ¸Z5 ûd.{ˆNú}Q:ý™»P¯qUa¿dç3ÍÑ;û@²«†6f„ïL±jEGcéN&p‚é Á«"ž\‡á|’èÍ”Ò! 0*÷W«qAvp9>iA(cs{³´«´÷8ì¢ýkg¸²ÝÊ a¨¨¼øÔÞŒ’öoŽüÐA{Á§ƒ°«|a þ³íŽÈ2ý!¼!v` wch¡åAiÄÞGvðWØÅøR–1³£Zmc¦Âóòî­›:ÒLÀÉ9ØÌfa On cÓ¼o„>N)Ï-™>®õÜÜá=¿8¶C¿@súü¥ýºrpÏ]‰m8Ê@:·7¥(]û°°„–cž %¦"ª–EÛš3Šfç™Ë.™wCÓ 5€—ó¬±Ì;Rº­y»ÙžUH»ÃÔ%6òL}qµèâ9›×êƒksBسºßŽàÔåâ†f½rÇÊÖö‚°ß$¾ |ý¥±à.¸u£c,T埀åew@Ù&.t󴀿¢ØëЮ“©“ÿgÂ8ìˆèûü:iZ:»3_–M¹K ŽÂÚ!·îχr낵¶Z­ìõN1ÀÂsq»[Oà˜FÚ0¿rE¨î½íßÂù4j‚þÚ5èÿ¥ñïlcqSáUÄ¢/íĹ«ÆX\;º;èkk$4r \ä廳<¥ üV¬}ËžÙ›±æ&tÙ‹Îi×lÀ4ëw †LÖŠí̹¸±}cLØXä&cž&+ƒ÷}a±<ÀÄÍ\ÌH9P1@zÅ0¸™©c0œd‡ C¢ˆ†Ï9Ieº™®c8 zᔬŸ=BÖCªA•ïüâÌv]|š}*–.îÁ+¥á _˜2§Ç}èoUX) 9Áj‘¯µx?s8îÐZ1 “Vc‘ˆë¾š‹½ÌRnÔÑX8ÚgUé.3Ì=Ié¹rç±o@us»¡ Ð}·n³ìTÝí8ævæ`¯º 4–cÞ4o‡ÿ²hÍ9çëxk.ëOÍÝf™ òMC»c瘟wÄq‰ûß½'ÍW endstream endobj 565 0 obj << /Type /ObjStm /N 100 /First 891 /Length 2164 /Filter /FlateDecode >> stream xÚÍZßo7~×_ÁÇÞC¸ä3$‹ @{AîpE’zgb«Ž®¶äZ2œ»‡ûÛäìJÞH»–Ò6¨—»;$‡3ßü\±8ã K1ÿ³ˆ¡B¸&)ïÙ0gÃÉ.ϳ‘€kŠ&å„«˜œAŸ’)>8Sjz¬ç£þã)bFödl•²ñ0ÈXŸ6Å^Hi@œ°ç`|ö,Q8Ž›‘S‹7„ÿ0 t¯œ1(6Y9 †”E.ÅP"}…é9ë+ŸŒ8‡‡‘‹ fˆ &ø(x{‰"¦‹c”;qd‚`wñÎåP\6¡¼òÑD6ÅdÒHð:RRšbbPbH#FQšl"‹®ƒWÊ”@ÒQ„Y™°;d Ô#¾=V‚6HÂÈãë'‚AÔYú$ë¢aå9ÔjU•‘æA¥Æ`#„n¡‡Ô?u¿Œ•뙄‹JWjuKH:À«<‰`è1(ú «'%†¦¥DhçJNg@ É¥8’˜L&ð$`À°3)x•MЬ2™¤Jó8{JŒUÁnJª€)e0.Py**1,‘=4(âMN§³É‘•;2YÏ ~OhOÄE„@‹WiàÅG]°ÆnÐ3hRÏ”Mz°rÁ@e( \낉LÑÇx•„U¦Q2Ð$j%)3ÞáFŒéYÕ \„’%ë[Àtôòå¨z=Ÿ-ÍË—¦z­¼Ãßè0R²¾ÁQBÞÜà8þñ8¦Ís€L­nR8òšJ¬÷ݨúùïþ=¹Xíøã `…óoÞýt7¿x;Yš3Sýô굩ÞM>-Íù¯”Ñwÿ¹àÅøj2ªþ ¦'³å¶¬Îãͨz3YÌïï.&‹ÚCÔþ6¹œŽ˜2gJ£F‘ c›ñæb*­è¾ŸÍæXê¬ö=Ê‹ú½nm]Óª·÷–õý_§³_GÕó»ËÉÝjw®Œàtg¯-€bLdC€ãá`Õ8`WÖQÝ÷µÞšê/ówsS½2ßü2½úö·Ùûùídö~1]]Oþ¤b̹`á¹Ôº-|ÙEÉ6§/òpq=_L.Ÿàâ•9ãšþç¿L•ÀRf÷××ç_ ‘­‡·èžD^S-µ€÷©êµú¼ÍsÄ‚Ô4õIîyH㤥Рi ùÀv÷Êp‹†}°ˆ)‡È°!ž–]6…Û”B‰„½Boºø°èÓ† Sü®c¨¤ó®M§³ÃIFg5õë4-)ÞÍwœØB|¾ååÌgoõ7?®þ|óq¹¼ý¶ª.çS;¾¸±ó»«Ê;‹ÏU òY¬^ o»°¼ÇüŽ; ñÊ+»F’¾œ*Oã2ÍGåy£rZå`Ñ[4Èmm9Èwðx­4¨Ë!|vƒ.; /q¨ÂËŠÍt{+>Á^QPVç3ò}*Ѳ˽Ôþɪæ7Zw.U ï‘$¼p.¿(®„Ò™ÿ<ÍM ¨D2Oy–S&KN§dLáVx?$ÐlNsrضUÂφ­¸¸ [-a­¸´[­‹•Y‡Í>°AlDiE Ù/Jæ¶¹÷AÇÃýX؇ñâ#’ãå|f'—÷ÕÇùÍdQ]ÿ;Xü:®~[ÜV°+ ¬¢Î'`7jß@,I<9wžvúÄþ1°‰? ùOfñ-¶ëʧ3©¡Ðô~še04WçÒ&L_hR!±³çhµå ÐôƒÈó©P€+¬/Ü’>ú: mñªI²ìùd\)½Ûë'·i„ئÇðÞ€é`4¦4zî…Æ¦€ä!¶iBݽ᦭w9„ƒŠM‹)>UL·îÚ I48$Ñ ŠÚ"]]¹¿ý“f§^;Ô¸B >Û’´¿l³ø~Æï=ý`oïï.ï'µ÷¿X,'+ÊÜ7&‘d$óѰS»¥Ú/±÷Èþüs=@vްjvâsêï—"Šƒ¢Á<&›¡üH6§“1¥ÖBa¿EmÑ„@VûÚƒè†GÜn'Õ ¿ 3l6>ÛÚPó »a•‡UÊ+SøSJ}bë/ êsJï S$‘¶ÁˆY[4Èõm„ÓøªJoyÒî®ßóƒYØ)Võ+ÎÀ`øé¶i"¡8åxò$ö ¹j+´5DÝÙ°$ç²+çt˜œ#íÈ9 ç6GU•B~NÒДMgì³oÚJzgwCÅw:§ÃP±Çýß¶ibbëQFï£#¥K|òæfwöÜ-Gp+¼Zbé%÷Fh‰ëŠûw®yËÚfrñ`ÕKð:üƒ´|qÖi݆ ¨–5­)ýê¶Á­> nÑøàl¢toÝrÐ-×Ýô/ÇÍ€x×+s S^™´þÆ`W^ßÓú^Ö÷ýcÝùáÇ%NñhU‡ €/äo³uÿ³þ(á÷ã)úhµy`ZuhBªÇ}˜ßgËOc;Úûñ…%ýo±À£élZ=ÜMq½ªÀž/DòûÅýÍÍx9…éÝ^þÒ_ŠÅ‘#0]Š! À¯ïÿ  S`KjÑuÓ}݃›uþÙM0ý) JvÓ€j³Hýñˆ(ÚŒÒ Ü¡.?!Wµ‡< Û¢ XŒýѼhwžÛõó‹Î‚â.Uv»cÂC3.9 ;¶æXíÅîfZëwSCd¶ùyJCfÉ•Y¢¯ò… ³žj íÔ ZÞš&´ì·cwZ7íb„bC.ßב9Y*ùdß×aÌg› 3[M=Ba›¢þn·¾ÿ*fJûÍw‹†‰­+å3Ýÿ”ˆ¢} endstream endobj 686 0 obj << /Length 3005 /Filter /FlateDecode >> stream xÚÍZÝsÛFÏ_ṇucm¸_üH'7“úìœÛÆu,§“»´´DGl$R!©8NûǰX~feÙ9?ÜxF$—  `°æ>üñƒØ?¥d±Šæë'¾-ßÐÍÅË'ÜÒMpÚ£üáòÉÓ­¸Ïb?æ—×}V—‹ƒwžŽ&¿_þx £˜Ea \ÌèÇmºM³ü=¾{r|ÙN …¸§$Hùµ(a_Î#‘b\*š÷—7—ço.g8íÓ“@ô©ae@[Cù†htЧÑð>lÖð›¯ýùá¸pK;P„æ°`ÙŸ^Û9åPB&ƒ†äƒ‹ ÜrÞPdÕd*Cí%xQÞÉD„ÞÑÉì†Ûéù‘% žÏè9/&Sy‹‰#íÕË4wiÇ’­Hÿ³¤b9–&'é¶u¶Ê¾$uVäVl£¦ƒ©Ð’é,"ל¾ž¯’ªriQh jež»äY,£†¢LÁýª„1L™ÓµJËOÙ<¥‡9hÔU§¥ÓlB²P…w.`>¸’¥`“©’b—DLˆøNf1ª¯D1±rŸÎèšO¸×7²/w9æ,ŽÑÈàéZŽåC#[?~€1uø•1£>IĤne«Ë‰æ^ò›Ïƒ9¬ZG^–×i^eõ­ÓBØq­.“>‘4fLïG}ú–nWØ0Tž.ðQyIå2ƒY ¿Ñ f–ç.®Š÷¹¾ÝÅ5pEžwqoÚÙÃ]eÈn*Ÿ°u(ÖJúèâqcm™V³мJISu¶NÉaÌÈNä~Á"¾3œ : ò%—R]81“í '<$œ8Uë ¦…ªöõãª6Áe|Ÿ´LÞ[•šµm×ø{eôž–´lÒµºC×<`‘Šþu-÷èš ¦¤B†·«ë†H½;D.Ëbû~¹ÙÖ}µÉ¾ÚÔ>µÉ¨¿)î­¶! › 0\ôâøäøâøìè¸ej¸’Xáæ-òЉ• `ÄJðo†é ö~˜L!?”‡ö«x/5 :¥Ï (ß;†/>›La„†ê‚X¾Ú®êŒÌcÆ_7hÖ¼=Kkf7¨Î¢ü@ƒ/òdu[e•KnI¦BÞO!AàmJÊæsX‡ÒSõÒæS3®Ô0Ÿž’õ€6”¡7»]oÌm`à’Ü{Õ`ƒÕÊHª¤bA/ÏiG_å:ÉÑ#pðøÓD^²ÚZ|†c¸£ñzT¬ÁpŸ#ŸÙmU§ëʨ×àèž`'“HzéyÃØfÈ ¨”ö4ÿ3Ìeú©5(?xˆñÏqVt€0òfs\ݲµIšÕ_ÒÒé !ܶNþbƒ&€>gë¤6ˆµgGÃÚ¸päð|´**“ûƸC„S‡è£/ë8½Bú!ëß¡µ}ÁÞjø¼ç(J©ž+ zŠüÚ¾0 T?«íF/I¢S ZóiY¬l¤ÈtóË2¨Eê‡DüÇ6ßmT¡ÿ/µXÉpÇ_. $J/ƒM¶Æ º›Ujnm ²^'bá5ÔW‰Ñ*Ñ+é/ŒM“ÒŽÿ“ÑøÏÉc»›êÃDX6ˆØ÷~,–öÃÿ$Ë¢ü#Éí‹—ö»Ù¼¨kbõ²L¦.^&kSq…V=Aìý”æy ûÓ<¡ßàwé'´ù<ûàô5вKD¯· -;Ã…S†%v´¹è~´OŸAdື{ôFõvßzuëÀ ö¦²Á@Rà^Çp s\Çðƒ.Œ¸C™¯LœîB™D~^Z›f[”÷¯dµ²/y ú¸ 0QpU!‹‚xO/ ¡žöÈ©0HÅc¦dͺހ#á=íýÞÜÜÀ•c§ye.¬©g·ãl}§¸Iª%h®F¿„íÍÌoºØšëSó»„ÔŒ`ÓÓó \Ü3é‘|DàjžFú€Ã}à ù¾ÞHC=í‘;Z5c¦M©B€?Å€&Û$%Xm»JJc. hBÃÍÜæ ™b‚ zƒ(Ç…xÅ”jcôßœ¨—^l¦Vå‘fRŒT>ŽÎ Ü Ç®‚ u0p9‰n$nƒ]ž}ìÂíP8p †÷A¦f_Øx&5Dªõ¢Ø0‚¡Íûj•½_š—«[z³È £É´Ù!Dv]kzÝVÑ\K»k°—‹mú°«y™Yð½ ±„‹±¢´¦îe5Î)|Tôdz3æûîCÔ(ƒøñS[a…¶ÂÂ!¬°œhìÆ´ßªí™¼Åm,Ìrˆ`‰]†AV.ò©™ïà”-Ò|>(÷¸W9a(ÆóÅÂF€Yj¿JVUñÌ%@ÄHu½Ë|¾^“r0³Ø)ƒ@>Ë]Ben„ˆoÍ>Ì$Ø Þ+”.ûLA›P+!êLb!Fpá@IÒ—†¥ð-zgàÕ6·[Wq’­Òß;ç,ÖZØÚ›8Øu¼ë*›Ž(`"tµ$†á–ŒyÓ]?èb“àL^?“·{™üŽP[{Ïéò1_gŸ-[PéÀçJö‹:×äU[²¯’õÕ"ép@G&!›ŒpÞ˜Sfke ¯RÓô+~¨]RzìP>]cw\D[ÓıöD¼ȇ5\…°j°Ëeê|Oƒsˆ†8ÊF gÃWj(Ïy«ÈŸv”3qg¦R·5g€OGýÔ¶|Ç©mFp·J§øõĶe„˜HÄ™ KÆEhXP‹âºZ¾ÏxÜ–¬GÎ%pÀžqÔ)uåR¸k’™w[Õ¬P¶(€:÷¡~/Xã«‚rõ´±®= Á-rˆÊó¦Ã{\ÕÓWf y,jË”ÞÙ,V«a1rµJ™­kl«ÊÞvîÚ]í¾Æë˜ù"}èæènÈ"sã-æ°Fk* [©ÒrJ¢ƒÜ4ž”ef‹r(“·ñí]4 ¶!ö!´ÄŽÆ{j,ü½³"Æf”©+’Ò®0½]­¦×ý³:Þˆ¬m/F¯ñ¸¢lúƒÖZؾëÙ߬Bº?G¶ÌV¾WÝd5ÑSó†ÚË ãGëò^^ÔΕŬëDByR´ÅOº@W ”wœØV‚™ªó[óÔu놧\a ½ hkøÊY9Aèdœe¯‹mTSûIùæäǬµ·¥,P!¬tºÝftÝè—µµm¯»rŠ6ã‘5*·®_â 1=\×ÉÂ’ö»Î鱤kk`soÐ䀃Á`A-8XYšI®·à)-ÀA`'„—A,èpZ±vjª°µtQºXMeŒ=¹Qz1Èï“s·+Ù¯ ZÛaDû¢[g¿¯²)32ŽÝ ÛžFNn 〭+@ß{°KNÏösK0ªSõ¾Úc"w?œhû±øìþ'Oû{áæ6%í¶!:t· ûáÃ}ÜCå~wçJaÑæµgî¶$(Z)ñ-MéÌ}ìCBßw èa2 ¸ñ–B&,| “ÆÌF3Ã]Þ;¤–ÔÎS¸ï¿g÷;È@ÓýÃßqì¯C1—‚ HfpÆWF{HyÇá\¸h¿ªôWF±»ºƒ8ÓO@Üß¿Þ&ò^>-|ñ¨¿xlVÙ¸|E9Ÿ¾¤eñ½Ó÷"@XW>ÜõvþŠŠÄ}ÆÃ¤”‚àÚA2óØàŒØ‡.¥F »ÄxpìÙémQ×VjD$oCY¨ Jê¡ø×Vîþi9î*Ƚú)Ó¦c…àT‰AD]ºNÖý€}ø8îââ!²sÄ©m-O-d³€`QÙŒv=Î!ç»NÙ!iõz÷9ÄL›™lÖeÇÞÒ¤·,V‹gΤÎxŠéÜvO¿|ß¡çoñTÓCøî;'oÎtç±0óóç>ÕfÈû¯¿èºkš0øæ%À\w®!„:]|SÊh;Üÿ‘¶Í› endstream endobj 694 0 obj << /Length 2993 /Filter /FlateDecode >> stream xÚíZYoÜ8~ϯhÌ“ˆhñÒlf;“™‰ãØN°Ø$Ššvk­£#©íI~ýV‘ÔiµÛÉdcg` E‘%²X¬úê éƒ?ºˆ¼EÀ9‰D¸HòGžî­.¦qúâµt.ºÊž?:8’rA=y]œ_ §:_-Þ;ÏÖñ¦QÕÒåœ;òÉÒB:o¶j«ÒâÒô«fÉBçÊêª^ºLDAèÈhùñü×G‡çÝú’±{2Š”·8õÙSJC.üPÊ…aö „ùC:IÀ¬šâƒ'½äñ<¨¥í^R¼%ÎU\À†}á$Y\׿Ÿ>ˆôÂöƒdnΈAÔRÔªºNefmÒ\·¸7vU Qà3‹Q ìù~;×ÕÜj>ñ@t–â±e$·Ñmñ;$æ‹!-g„õûà197#e„2ÚRy³¢.J–nÈ¥s´ 9¨”‘ÑÑ’γ£3óV” f¡³RµÞäuŽŽK9¡r"mTS”vMáä(ämݘOz&e†ôI»i±Rè­WnÈœ0]P\3$¾´óîÇ*aŒ¼^ãªâKË¥Ö’­Þ†åÞZhya®Ó:mêa߭ĵ8ðïÔâpÙm Ù•¹ªìMiew§öF> Et§òF Åh(¥9‘ ÂD§áï¦þâjóúÂ#ðŠŽU&¿×.î©0³ºÁ¤Ôz€O´ £Oµé@ôÁçôa‘Q¸}øÀˆ ×EöÅ. .#Sn¿¾éÞuÐQD¼Ht`|=}:+&.÷ùðˆ¬\,/Ïð)ôþdT>ƒv—Çý´7¥z•þ‘¦ž³Wó~VfÛvqîœcÑ@™Ömk‚HÆÇ/R„ù9Þ¸7óœ…ãdÏ }ß9.¬èOÍZ×t •mÚ ¶.¶…¾ÝX»Ävb¬®ýÀ6l Z“@@Sa 0ƒ´œÃ)ˆÆNç¶ò"Œó‘­¦Øz¼{WÍ v^°¼¤+U$ÖA· xë9Óbòm¥.T…_9„v-߂ѿ¨ ‚H­]Mê‚À¬åÚäˆÀ3X Ûï³Ù—ù&Sy‹-Ñ`6ÃyDWf×Ðõn Zg[;ðsvYV)À4urÓcrˆþco¨žðÕ:i×J~˜œÐÛ˜‰¯lÒ:ˆ õ¼€|"9À'‡whEšÄ™™õTu¹á-ø”õ‹`Á!a•`&{àÓR»ò¨™Nj*ÍgÏÝóSdÓ0µ 9ü‚¤Î<5è‚$b¦ý•ΪLjýJôo–~²oˆx|›mµÒ§ªë`6¶ˆ "YÛWá°Ð7íbg¡%âSð€p "N"@Ï÷€·¥väsà=™´;t:ÏÂvnã2ì ¬]C7”g M:KÑJkûýI+ [Ø8¢²ÐJ,%›äÀujr{Ô¶Ç­í_§µp@„#4"õÉŒPùØô‚ûf;Â=Š0óÀæÛÊK‹5Y]>™;!‡Aÿç"És“V`½Ëò„½vAˆ|!Aâ"r\0ÄGÍ@šÌn òEt†Ìy¡ U¥ zÙ@>k…E„²ÈLq¾VsÍ &î<áçAuËíxÀbmLæJo ó$š¿©J½ÏTW …ÈÔ ¬Ó˵›™ø'uŽhÎAƒ‘@ÒØK°.³k5+jVç ñŒ1Nüªá ×zslºó¶†’Õdn]†­ÂCd¼{u.»t¡‰¯ôkƱ}¦…ÉS°ËÀðHIu?ˆ-©ÒM‹×ÔXJD{8ÿÜ£4t÷Û¥¶M#Ð¥.ã¦e¥YÛR¢exd0qÒl5óÈ©{woÆP#°[ê? Ö´c¥¥-Ôä£ö‹¬ì\ Xî@ p°Õ2 rzü>jÀIvgëèºL&Ù¢šÁ”²2Âà" øýHæz&ƒHS'« Vföl’4œOx¢Â£æò̳'dh[OnJ]Æ´=Í6i\ÌxLwqë{u%¿ï*yz5­Öº„ê‹È@™ÝÍ8ç)ÚÒ–Y4.ŠÝý¢]{Ù¦$KC¶`L!÷Fû–ÚÏ9ŒÉ¤šå÷Ç-Ï'Cží5œåûÍqýÑè¦+ψpʵ3–¿'×-õ®§“ŽJSŒQ8y·úú¬ +â$Q­¸ÌªÍ9™ŽN˜Îˆâ\­1lTc¼Á „ª¶dÆ4ñÓvΖ,K;š ó^mB‡ï€3n»V†$¶³Ä…1#ðú2ißë¤ÔÑì†Ã‘eû„ûý•ÞB.Di 3'®*쌿ì‚ÝÑM—vëžÉ`©aڀ̫Þ?<Íþ/¯Q®<––@KûñÓtUX'®ç‚xLìXå¾›¯ZA¾=Œƒ)unÖà¿aݵYËÔìa¥¾f/ ܺjqŠƒh½h‚ÚÆ F;€w \/Ú{“`‘L_>÷Hfîi°³%·S6]Sº+H¬ŠðÙ8HÁâ¦Jÿ¸µ–èqs3\‘]nw1‰áN$ĸ"ö²X¥9lÛ•†—Y}FÇ[¿"¦Ài Ò•ÉN°]7 ȶjgø´M3›ZnmåÈfˆ³¾â‚äWE¹š·Þð £y4À‹t)ÚºÆ{i]®¯hÒL}ìë²”DRšhûlèåîžRÙ‡!O±ˆ&'ûÞ( £áíËîñ´xÙÍ'¥ˆ1woôeÛüþ܋䢞› ¶ôâü©7¨ñlÁÌ¿ôˆÂŸüûÈdgCŽvU¥)ä¿|bOÊ<”Ûsø÷Ÿ#ÿþƒÕ7åãÂÆÿñÁR7ƒƒu7ÕÜ|!%2âÄàüˆHŸþ%,Î=¸„ƒÙÌÚäЌ҇q&úKð¿Ïäu& k6'œ±4w»7J¼PüP6-.fgâ$ârï¹ú?ÀÖ‚¹’ë-/Þ endstream endobj 700 0 obj << /Length 2689 /Filter /FlateDecode >> stream xÚíZÝoܸÏ_±è“ X ¿%]‘‡öZ§)zFûŠ¢¹<(»Z[8­äHÚ8¾ûç;CRŸKyíÄ8\Á>,EQÃáÌüf†C²…[%t A¯Ö»gÔôÖW+ÛxûòsãBŽFþõòÙó3¥VŒ’„&lu¹“ºÜ¬Þšž¼¿üçJÄ ‰£¨˜ÞûlŸåå¾{ö÷Ë~Åù9Á‘GX‘ŠAÅJÇ’0!íÌïÎNbìËu›WåI(„Îò"{œ³½û&ÛØV[]eíuVÛA·y{=z` ÖOï¹ÿX6Uñ)ó-@RB{,“PK¼jí\¹[ °U,ÈO€·"³oÚÊ@*,"’uR`–ÚÚˆ >ÎrË4¶@[‘…ë"EŠVYÍN>„Æx ŸdvDÛ5#ÃþWeq׵ܫõ¾i«]7™wŠÏIP¹þÝ Üm~\þéŒqË™ä|P›{±…À–m4Yý)_w½ùεr÷ÙUþ 'ÍJûxcu[‡=‹ ùˆÑÀz„”ÊPõ,¨wUÿRÊ o§D{µä¨ñ:ì2@9¡T*hìÀloïlOQ¥›p“96Ê ð…2Æ—r´‰Ki€¹˜ÆÁE[£Ÿ´€™ŽÅ´€fcûÓÚ}¸N›,ÌË&+›¼u«ÇuÄÀOe'Ú‚B<ÒÏ>§»›"ó™µä$â‘Ç CÔxÄ+Æ N$—sRjN*ž¹‘)M´Öaçå";Š(Áîe'!B÷ˆNË÷ :?ÊQ<Ыó3/G ¸}~”£^„FóÃÒ¢À† ²{P¼ÒÐã Œ8*ÑÄ…r–)°pZ‰¥öêüõ—ƒë†Sü€Pª¦`ª¹ˆôjù!K]pí ™CÃvìÀF߯Æð¢I¤UçüYä›B„V}8{å J`¤ãy¸R³!‚õšEtÇ·Sü4®Ó"­9\€ý˜¦Ùï02`'Â;ûÀ©í3€ÏK ùÈâ®A~´§ÎCÌ‹ÙĉÕ:õjèDõtbå$9"UA(Wc©*.Pø·®Šý®Ä¶ ¬oZ·JYEzé³<Æ)>ŸU/âƒÅz)sàœÄqrÀ_§Q|@"‡&Ê˜Ž®aôiuÆ ¥Ñ,ô>B_¶{k‚#4lìó²$à½;†×¾5ÅD¨~õ]0n,"VD&Ñšd2ŒÝo0Dé±Ì¹2þÕŠéÖ>LŒ¼h &Zòq6Q.Ù8„%üu6høß£Üt^»Æ=hµÆ8ÑÔXF&!z“×á,ÆÇFŸ Ú·}–Rö#û Pg^%š(Ö+²\P쬆(’5í‚aè_æWÎò"Õ&\¸Þuë‹—2œFÇÌŠ‰h¬6ÁŒÇ¿ì-ê  7 \ȇ*˜Ù¾Ü¥S}6ó'Ë~Gƒ²ä#ml}ºheàåi¤Øí¬L0Ýçõ\EF“€ÐÞÄ6Ððм®ˆŒ²’ãžcÁ oQ>SC+­úl r*JÙq[“s[s&Ü:'y`ÿħ¥'¸¿”Рà]³;–žœïÍvÄIÕ9ájk§Î7ÂÄùÚŽsãÆEÕÍ1´»{ø›¡³‚)ì}ýÆ·.#‚M:]²½½ð;3Fä7¿Ì¤r1¯±Ìºýø²Ð.>îÁÁlœéÙ…f{½ÎGÁN:9ŠÀf¡užv•9¼^`žLÆ nÛILX´À{È@‰…ˆák’’^vë¬Ý×¥å2¹¶Þƒôר†Öçi8¨ð¸°¸Ï{šëj_8)L`¹®ÀËl²º›ººIÁ²Ýz«Éº%@7¿7=g HÊ1+_ §¬Ïö›ê;oaA‘XÆÓ „±ØNnLQD‹$š9ÍÿeÛfõŒ½2km\FZÿlß^§Nl>;ŽB´ b?u*›©Î_Í0Jw¢éYu(qö+l•Ø0Ǫ-l‚‰U˜˜‹© î/ N‹jóÒ໣º}dŽͦ±·KDô#ˆ¼y "ÿ9Jä½-…öÑ‘~¦E¿rÜD=qAt]TX¾óà;Tò”õÐó' ñæÈTæÇ©üÛ[pÙb pâÉ$éø†‡oxøcàá«8ùï—cŠ ·ñtã÷ûE?Šªèª¦³W7ÝîqJ†+¨~JLéîÃ&õšâw‘’ú½Dȸ¥fß@ñ‡Å.ÿ¼iìeøQTD·å¯FÅÿS§ž‹s%áaz–ðüê:,2»·r‡D[Ü`mÌÓ2-î~1'ŽøøæÜ¾ßUfÿ¶ÉŠfñüF»³$ö¨‚ âÞIÎ÷À,1U _þ2¯¬E¼·ªÙεÁý¨­$cÃÖbª¢¨LЮSÓ¡²cÎVmŸ¡sçJºýÚž·áûû¦ªÛló¯Æ%’GbF TÚ4EðÂ[¦’œð¡Vûë2ñýÙÅ©·+`¿Ï…žèû'J©ðºCÑíÅË>‚x&8”]rlέYÎhGQà1ìTæÇìüú/Døú­RI”T™U=rÖ×4\Õgñ ‘ÒW½lçÒ9L|Q}0ìM²!5qüyÏÁ""#vfdW ’ Ï©ŠÂ\é1#w˜‰LýŸçxÁ/íÍh8¼D÷ⓦä·Ã ûm#H<œšöW¦t@uJ?õê±õ”» ^fe†·FÌâ ãËñõ|î•T< v7ýÂʪ]`G¨¡v:ñšXêå2øa_¸SUHêÄrªž6ïî,%Òud®ôàãÜpmï+Љ0,™Ž±ñÙžñm$7¦¯íûm3!š=Ú—k¢èHBX_4>ì7æR•“€&ŒË‰C·7·Æ'Ñ—š/0ˆMäÔbäé:ð,ø,Š"þôN‹ÙÑ8uœ²*ˆrPŸÃbîDV$Úã°D¢Æ*6£|â®R™Á ð`®jÙ&E®E¾à¯Dã÷Wê üÕ$.ù«É•§'÷Wh꽿¨:òWQ篢îvÅØ_MŽÁçþ*"tÀð‚Ã{¤T.9,ßQ”îN£ä#oRû.ãÝ%ÅÆ‰óÁY'"Ïè0fãákwÚiÎ`ñe^Žà„æ®iÍ}6»l¸¤Ü´ &£“x­5Š{è[BãK¨‡w'aí¿ —lÏ—n! 7ž­¯oŒ±Dã#;mn @Ÿ½îEìI`XÚ[«btkµ‹AзÀåì8—‚¾†[%_©Q0ÊXM.«!#î´N»›­Õ £< »šÝ7ÙéP[iò_²éam§Éûo#AÚ‹òÞ)°¨éYÞïÿï‰× endstream endobj 705 0 obj << /Length 2649 /Filter /FlateDecode >> stream xÚ½ÛrÔ8ö¯HñÔÙŠ…u·Iñ0ËÂÔìKH`¨ex07í¢Û¶†¥æßçHG²-£&É$L¥*’eIç~uÓƒþèAžhÎI.²ƒåöNjWÛ÷8yñóêö%°1™ìüçÙ{¥< )ÉÓœœ­¦W¼Y<\}Ù&œó…¼˜!'»rWVõ{\}Vö‡,[|6ÿšöCw˜0‘ël¡èáÛ³ßyt6À—Œ]Q³óL›bJiF²• B¹@d7ÅöÝya Â- å„Êù  WMoá‚pÅa»Ý÷[*Ó%ü£nkÀÆ ãÚÝKñÀ£ß9u±š9]m[}:”j lÑ}‰¯ÌÍݲØ­½Þ®­š'͌٢¬ñ±6 Õ#C p¦‹Ç‡_ø#°S&ËMÑu«ž‰áÈÑOiHCô/fû; ~`P@5ψÓ3Ènßu½9 ܹ Hƒ2¼”¢ ãÖµÛô•GÖö Jš¥Œ¤Ù€Ãí3%,ó;+‡M¿v´ †ˆ ŸKX.HžÑ@»–1áR{¡ï“ùW¶ÅfcìF„Úb Éh ‰1 Q’äÒ¨^Fò\á''1PJ„î×ênB*”ßô¤²òÔù¢YáøÑØ·á XqUãò&3‘YIëÅÙºrPÌxe6Q8Zà°, ìBÛæž/øø¹ê×1®³,#*¨z£‰2Ë·¥Ü”[0'¸ºG:HxJ‰ äÖí–fÇÅ Á‚ûÿ…±æïþãå%Œ­Ëh vFî"ÐõínÙãÒEÛ Mî–å9.½sŒ2s#Œà0ýXo?ÔÍyU|ª'«]½ì«¦Žk´µÕù‰úý/v«ÔdÁè Æçå¦Ö6ch=EënÑ£åöëªþàxRm£L‘é¥×é‰Ë x›õÍÓå¦é¼æÞŠ`8üW¹*À¯ážÔñÌuÊCš+"ÓÜñÐ)à_ž=yvczrûe”²êé‡}ÞNR’éÁ1þ²ŠL3=0öCìšœ(6Ó^ŠÚk¢0åáãS\¬újú>ƒÂÖ12i*‰h¸!•VMõ?k×%Îw}µ©þ_UG¬Ç3/º²ýT-K\4#`½¤>1^)F(ý>³IÙÀr«)|ç3¢Gw½ ðʉÔ:ð_ƒÿ¨QU9ujê|2Ÿïe~.nñ·6:©,Øœ-Gn%èÐo)UK8&MÀé˺«ú/1Hà¸Ð>/ᜨ½y]ŒJ ÓŒ×W'ôÑT„™©ß{z3¶QMhÆF‰úÞLƒR³Ð¼¸MoPLs“÷%ªR[v˜“6uWNü«¡Ñˆ©Ñp0šï Dp‘ÉëLŒL‚Ý¥YèEO~87,e»Iªì "ω%ä;ͶlæW5މKÄ ºH½”A—¨ ËQÕåõm2¨_·Íîýúb×OYp-Z)Ô)¿¦.m&“<þ³ÆTX\2@¬0(IWW™%¬VƊìÕ .Ì x«0Ë5Û–ÍH´žns€kÜ E[⪫ÚÚdrý$¸+Û2 *RWzöÅ”²öuäR옾™=6A‡q¢o汨ÏÝëÈsò¹u`B€!òKTQGû]?dæ|ˆ]Ñò d©M{ñw<ù›f× 1Wè”_¤)¡&üXÜ…Ÿ¾µM#ùMÕ›ÒÒ+Dë”jYteRŽ™ˆ Õ&äd^ɺ&ZBhHÈÔ7x¾——G®:¤WO¾b—¹½:6÷bÃ)äOê»Ø¾q ŽÓ”‚õ\'Íé£8:KiÉåèxÚî™”wÕ§Ä•¶‚AÝGCSlœŽ$ÌtÏFIj…Û럞>ò(š©’ jߓҔøJ@­ã|YuŽ®JÚZ_ùòéhh þØlk*m1.împ:˜£˜Â†tàë„Ë<.µtp‡´ lÌÉþ‘zÔ$‚ã­C´ð|4áÆ8fâÅ%]-8—e'Æa‚ã.@\ì6¾`QcË-ZÀå„çîO£¸KÂ5ànêãX”Ý”h=d»ÇÑ>ÉÆî uõ3Pa}œ ‹€¶[]î™ás Z\v½¾ša3ë““lv’' @¨­$ÏgXnWa‰ç3kj"_3µåP4Ø”eÕl6¶M÷¹óS„Ö˜ƒ3 ,н§¥ÆVÐ3हş¦X$ÁXÄø.Õ´Ýõè +È%ü4Ö§ |P|úuRO¾O~ é³3»aÓæeb^».l_ÖçN‘që˜éÁƒÉZl„k(‡Ü9£ë³-ŽÚÖÉ(Ë 3Y¡C°:/};Üõu¬têa&(<€Ò´È4v˜ä¤ìW‹m‘ò÷¨?çŠäc:ô&%Ì·q(êLŽýRäÝÛ¸‡€jG†Å ŠÑ£x¡Wð°Ayz¥Ü…±±oõÀcÆ¢i5Ä 6˜ÿ¶,j+˜!y†ÙDºÌ×|0Ü&Þ4aJÝʤøÇÏë²õÇÇiá' ´_›‡w¨Jƒ…Íœ¢/¤€×ksù¾m/}¤ôðÚ6Ú¸˜iÖ ÑzÑÇL=q|CcWH, ÖØa,bÐ$âl’¦iÌ%å󃟣.€æ°i➟"Ø ¤roõj*lÅçbE@*Bé¬ë! 7Ë5Ï0KS™M\:n¢éd‡E“é-Œp5ÄUO‰RPß £îL-¢,£šˆ|€w?ê4'u¨@. ¢«QÑaJãöä Pssž_‹=l{ØÙ󃸣|"\œX©ë•óeöù¤åü´3©MöeJmkgð¸ÏΔÌÿš…7Y;$A÷$ÌY:p·±µ?¨û$‚ »ÎÆ£¡ö9s…ƒ£¹ÂÃ~s…àš«Û1×+ë#vkIÎä\!©¶Ãˆ)nNPÌh©nÅœèÑWô¢oÔóy ú+YøMØ›_¸dÁe/|4 ×*—¶2‡Éæ‹ùÄ猪Rª°‘÷Ó ŠÚâ2ü†ôU¼ø¶)¥ ƒê÷-›F¾Xíjº´jLø_í©~Ä(É'TÛ=ÛûýTs6¿ö/7H Õ•4üÎ3¶îäH­rÔbæ*±}f—÷}Þ§æ7lȼ£öÍçnÂô,SñŽÎå&Íõ;äZ¥êšŸ”ÄâW£2‚ÿäóbÿ}Èi^×l°4~ ±“­÷O›Ëj¢PhI. …,²R ŸÇɤ13|ÅÁ‹¶¾Ï®ÜÝÞƒ¿dµ\uwp Óo3³)¶›ûYäÝ[œ9oi¦„ ýˆ”ÌKìɽ÷÷hr1Å@ ðÔþÛßí¹¸ªWýž 6¹gûÐú ¯N¾Áa ^ù‰ÇØ#ç~\5œâ~¢qòöØ7%&‡üï,"àY€…;=ëm¿y‰o_ààâõÛྵQÇ)ϰWäYöÌ''nòjäܱÿeÙŸXLÜ endstream endobj 710 0 obj << /Length 2517 /Filter /FlateDecode >> stream xÚíkoÛÈñ{~…à~¡iûà+Æ}HФhq6òðÁù‚ÃJ¢,6|($•ØùõÙY®HšŠãk ôCaKÎgfgç->óáÏIÉÏÖÅ3ß@ëÛ=¼ûÛ3nñ–€¸ìa¾¼zöÓë ˜qŸ%~ÂgWÛ>©«ÍìÆ ÅüãÕ?f2NX%@Å@?ÒCš•·¸÷ìÕ•cñƒ’ æ#¢¨@0éËY+Æ¥"Î7¯ç±ôåºÍªr¾”Rz¯³<ýˆ’pÆ9K‚@ ¥ ‰‚•ú†BÑG ™ˆÂã×)2ˆu‹)\° plÞ">ÈÛÿ‘ù8‡›¼Ÿiù\®óªI7–²ß¿ØgQ$ºï~÷Š¿bB9¤KË>yš6#¸3'àûS4§qý4–2Q›/A|Z$,j2é©[âÓ]ò,[ð ùj—5ó¥â¾·uö‹oëªØÚÔî5mª7÷˦ÕmJ=ˆ{i½­êB—k -RÝêî«jkiÑý™gç¤æ­LÛ¥qeß ÅIª¯s ^ÕŸÞ¡¡/÷Ú]J°‹T—ºFçÓù!¥×¥Îï›Ì~Š6qq=ç6Œb ŽÎo«:kwh5òЂýøs™–V<øÄCA:i”'$Öy^9\ Æ=b£vExUi1Àæ\xé9ˆâL…γ ¤4iñEOy‰ XÌDZ`H-`É1Z - •o¦ˆŠIîni‚FGŸ÷ȧ$ó>YÄ.¨‹Ë„3!‚¡ªÁÒ¢)‚À9ˆ%ø÷í1"õp  9žc21w(x«’‡žÆ%òšµÎu¡Œ'tu:ò/üÐh¡9:€wëθÂëhHNÓF c¤ðlì’v1 !ÈÚms¯èÇ¥%»³½’2ú‚nR¾3B©/½Ók´þÀ÷ºÈB.ªÐ¦9€&ø!Äœ1D}K-pgFÑ}/‘'®Eò˜Ç{y?y/> 8Ü pÑ$©oÝVõ‚/EÂ|(hQ d+™¬ïOL&ÒáÈI"õ3ó§SyIøL}ÓD…DXŸ‡‡Þm×úÖ›´þ’­íK›ö ¯×c³ÒËb"xŽÇOSB…Ì?ª-ÀÕ•›N¶NÊ^ìB¶šIçŠùœbÆd’–ª?åÃ]¶Æí0¼òAxmdÂ{VNxØîé qÇ^02¡b&ÉcF&GF4q-t[gw‹) À~¹z¢-²S6$ÁX 4!²í 01¶ïÙÌJ ¿§&ŒVƬ¬[‚ÅE'ÍJ)(õ]³J@w¦¯Gï1ƒ$êN3mžQì. eÅŸ ò@è0!ôñ0òžãÒuË9'C¼ŒX»úŸÕª!…P í¡è³Ve«²á5±¾‚8K)Ò*Ébñ0ØPõ`aÔO ¤K•]ìÜPÅñÂ-Áíe?ð¼p5mz=‘­Æc‡Ú¹öt¢"b ˜'&ZlÿýD+˜«ï'Zh9£A TÊø.ý€¾Tal+eèN%[üÊil¢ÅS²ÂЉ6r‰!>»b!®þÃSðÃZvŸï!5Y¼mº‹‡g˜a)¨Æ”.EÌ{ŒP[úãe€ÙŒ0'Í÷;&eDî%eój‘²ŽPtpc%!°¥QÉÿ½RMöc×È’‚h`IaÀ$’€F6¦ÖtÞTÏO•©*$ hP ë}<‚æ›#¼èÁ§ÅŠ E¡ ‰Í«/.ÞüòjJ7bŸu‡Ä—„þfÐÇßø´BÂè¢szâ`—ièG þ -Wµ.›Œr/¾ïëj¥WYžµ÷ ä3Õ«½ÊÕñaa÷ WGŽÙ‹/6Ià‹Kø‚Ib²!,L ?i0…5Ù·×÷˜ÈðAd=2Êsz€TCí¾˜0kX› w‰Pµn¿ ˜ é’©¿ºš¥¶,°©¼Ÿýr@…HF„PY2ú.+ö€ûjÈõñ0x˜Tp=›‘”¼›}Œ<Í— îÒhèÍ„VþJÃz)Å È’Z·´Òç ùðǪYý‘W_»/,O‚Cõ®§Ñõ46úò-­+s ¾¸¤ƒØaäçã8RA6€~I‚ ûà*v$© $åàQ³:mŸ½µ³ÇQ§HN‰ÏÌ«(¸TV¦ògþܤ (©`”\ozš@ùJ†ŒtávŒàÀ1» ½·ëµ] »þæN=¾ô›£n ç¯WúOò·ì%„w´¼µ¬§gf’HZ}Œ-'OmLdtÞÎzŒ ø§k÷HD–SW5ý¶šòz#³y>)Æ>¯ZÃãùåbl鋳ÛóÍ}±o+È£´û²:”›æüÌ"3F3¨LC×![Ò}’ÎÄgŸÎ_Bç_®1·Þ7mZ|—úðT}º ÃÅÙêüâú…ûè,ÏÊôk¶iwDœ wBNcp g÷ùH5vûöl|ÁË)%@D4n~¿ðü£bøižÞÂÕáîY^­M¨<[œ5ÕÊ Ý´gÓ¨«ê®ÚnÏN™ó]®Win0/'â;;ë°FÜçqü²'W»º:Üî Îö¬ÓíQ†‡]WÄ"¨HEÂÿ ù¯þRí]Ó8ø Œ™àÉ“~ Éu±Úè©ß!°ß ’ÿ‘D¢?ùƒHüè"Â, GaÖ2†Ö¢…Šò›ñYl«|ìm±DPÒ5 k@»Ûë˜ìT!Æi'¦â^ÙŸMhÃL&@í¼¡¦sŽm‡qÓŽC¹™mÏ{±×ÞBï……>WÝHˆ^¿À`{>êµi äŸù!„>Õ³Ÿã™6“ÄX™ 3‚f8mq³aaç}}ð£ Ý ÁT•ËnŠ×ÉQ–¬iÚ* —@v5s7†·—´cZOÐlP«œîΩùœú=ÁWýQy¥?OMkâ~;*|qj °P> stream xÚíš[oÛ6Çßó)ü(c1Ç»¨Ðuë°[·%nQ íƒâ(‰PKJ$9]öéw(R:”­¤i‹bAX¢(òˆç§Ãÿ9*™aøGfž…Œ¡ˆ«Ù*;ÀMky>3G?Ûoƒž?,¾}.ÄŒ`áˆÌ–gá–§³7Á³‹ø²NÊù‚1ˆ'óç"ø{“l’4?7­/’zNUðAÿ)Ê÷Õ|Ayª@²ù»å¯?-»ù¥ Õ=oYÊáˆqI­¥RqD7– $æ !iðC±ÉOÁ Šài¯oª´Ò–l?*“1Ìf *”f7Ï犛|U§EnïyºNÞÙûÁ‚"!íØÞk:uƒNQ0Ûöx½öC(¢åÐ7ŠÛåõæA†9·†Þe˜ Ö¼ÏP|g~®ò¢ŠOb;4ú$äˆG¢½í-ØgG”w&®ãìäÔ&¢a7" -»%vîùÑg‘ã@0ˆøP"L!F³aˆòÈÒÿž¥cß Ž÷ñjŒÇp/”#ÉGy|xoN#»wŒ]PJa-ÓVÙå¦N4Ì8xZÝd—uQ§+}NŒ˜“ 2§gEiú— PT䇿®“ Í¡çù:Yè“Õ:®*s1¿%nôXÒúÂ>s$ ‘R[~óïHò®K•”×éÊ>Á*Éç4 @oUÈÞ:Ks#Á¬D2²Âç—½\÷+ß÷µG"Iâ¡É±IM˜´6=-Ëôz.d¯µ]<(c³Æ,(ÎÌo™\m’ª®ÌuÍrµŠ×qyè3ƒpœà>¨%w–OõPÑ¿zÃÀ†í ÅÞgA!u$òÙ´ RÀ kVH*æ(wN= ¾¶ïÇ…¹TÈ<®eÁi’Å@c³\qmÚw+ínKp¼‹ï}J„i7ÒâÜ8ãZc”¬ê¢tݶNòs?¹F’ÉÝàb„¹/\ í‘2Ü’S·3YLŠ‘"Ÿ!5"Äâø!È’Øî»4xP§™…¤C¡Ýp01“í…ƒ>á~8Ät8Ž¿28„^åÂñêÓÀÑìØŽ2}p›¸K±å¯ë´JMfA]–ö„!ôþêBÊ-2yÅ¿05!,A¹ÔdIMãíM¦ÿžUîĸGÚDšyÓ^™ :Æè «©´pP*½\žDK¤h°¼H+3ÇY—l4&åëkÔæÒh°¢¬+?¨ £X§þ€Û8(l$úÁ¡¯žC‡¼5‹.àLN&t¥ëWÕ¡}u.’2q˜ôê¶SqÄ$Û¯Û¹ÖÐw+6Um^Çöåõxœk?v·yR5**ý7Ñ¿ÇÚýcèD¢—S~¥HC®áVšž¾\NTŠ&™³­¹]n¶C;þ^tr¹©‚ߌ^7˜%¶­Ö Mˆù—˜ƒê¦ªN³öBYlÎ/@ó#Ÿ·¨Hõ»P—’ºþÃ4,µSÇë:ÀÅÚðÛV%µy‚‚qax¢!äÅÜIB0t¼«4ovt R¦uÕDuңМ䅹ºnW+4‹B†‹b΋¼Ó4ôk`;œÙß6­±Sl'.­CïA¯ÛÇc˜u¯‘£ûàAZ<ðxlñÀ-Äà‘™Æ2©lLÉ«ÄöaåçD*Øwngù.'Z2—ìá7œ8äb«ìRÞM†#,; ¿Ió3Ÿ 4fÆ–0ŽqKÇĦÛì`N4aúªYTƒ—>oˆÖë®›Š¼Ó4Àvb£ƒ¬ésfúô5 AŒqâ>¯/cæ~Ô¶bV‹ÕµƒV€'­6^WÅßqï|—O_åEŸÄÍ3ªt•‚?eˆÒÇÿg-ƒe%þG–î4ÌWÆÒ—-ñ/(Vp¢\ »‚(ÇÜ)ˆêóöè>nª¡ú`X å”Z»†›LT÷éCzhCºn/‚FðˆjwâçHØ®¢‡íRX“òêú­QòŒ¡–r(½´vðXí·îg#ª}ÐeнÈÚÏÜöÉIŒ–a§ÒVaÅÔ*¬‡?G0kð!Ì«1çëýŒ…®ëÕ¾ÕH„ÝK²ò§Ãâñò¯)3´.u m•@õU>¡J@q8LÊŸùÍÞo #µ¥=KÌn/qcã÷ÆdoÂÏt±8šñC¨¤ºOUyeóщ™ÿƒ¹û3”©£a`Dig ¥·ßY·|A÷©Ä[Œ©× ª ¥&0) ÁîSؾ#“¶†‰Õ*µnhnÂüŽÂK¨„ÇÞ/VKß¡`؆X˜p7± ôÀ°LÉ)ÀÒÝÀbØåä`Ai XÞ#³XݱȾX]^@Œ†ÎÖûé«§¡@œ·ÅS~—ð½°¥ŠùË©ú‚—*ÚÕÜû6¶fˆ°0ÃÞ‡=0ëa5ÌzÊýƒ”:ø  –#¤¢½> stream xÚíZmsÛ¸þž_¡Ô4DðN°íu¦É;é5iÇöen.—´DÙšH¤#R¹æßw_ ZŠãL¯Æ3&¬€Å¾ûì’Í(ü±YJg‰$•f¶Ø>¡¶ww=só¿=až.¸Gùüòɳ3¥fŒ’”¦lv¹êOu¹œ½´œ¿»üûL˜”˜$…Ylï‡}¾Ï×Å5Ž=ùá²]@q~$'Hy‡Íû¬0fˆ™i# Ò­ûóWžõH%Þ~¥Š.àó¤ƒíIM˜Ô 馜sý†ÿòÝ<&‰²béûÛÛyÌ“và ÞLTî‹e…:*Wn`±ÉªÊ­¥Å€-M‰¤¢YlâÇT´R­ovåþúæv_?ß@Z•¶¼ÿ¼ùBQp mוßýÆ #ß|uj],rk 1׊$)è ÂTÃ{¾Ë’Šh‘Øà^d¾·(Ýs,sèjE;gÑÒu•…{´Mc£^<žfåŸ^Qó˜E~å"¯ý*ITîÞW®Åñ»òE]îì^¨ßs»°S `2/®ë›R%l]%Ü^„uªÓS j3f «T(h¤„Q/ÆóÏ×êi-ípÖ¯ë6‰ôn“ˆ¡ÛÀÀ•}kÜ:¬ˆpÚmTJ?à5h~žb—W·Î€Š*ws×ëmz"IÊ[üb±€ q%N«wN” –q&²uû?¬‹UhöXpN4´û~æÜdj—ãIê\ûZ—Ãt9íëß;¸÷²h't‘H‘EêQöéHrÿcër‰³ ër÷òh¼‚«É#\Îð»ülàÒ8—ÅÑ4qäyî8È6UùÇ õ+bd;ý‡¢Ü⮪+»ÊŒ›„h…³rB wToÏæ¼¡XÔk{–ÁügëMþ®3ð~vn­9ÝMñ¶3ÝŽHžÿŽ„q¢:s|šeHÒ¿N¿`šóinøçLs7ïæ9¨è;÷øP,ªì*óSÓ‘§ËTõ½8Ä€$\¶,¾ö˧c±'÷n"ÕµŠù>ÄË@uSg Ópìi6t˜“}“Vt15‡>~Ž7S–˜´D¥H ÇéÉO–øˆ–ø>Ú onÍl`S?ˆ:óɘÛ˜?cŽí#ìå—1§`ÅðxQnWc„otô×êÓö¶.ëõߓ蹅 ,ªÜë Cw¤sxÕ§ªÎ·nÔ'1€ÜuÞäTnŒ+p‡+|>Ÿ‹MY!”Ï—OCÐõ&|´Óü×-,õ˜üú·uT0®‰­À ‚hÓZ`•ï>®+,öÚ©ó]å@` JC±Væ ¶pÌâO»„GêÑ25Ѻø•2Y¬ë»4¼™h™WŽ4sé•4ª8Wîê|Iæ±Iôj¿©A ë[\ÍJ¯?›ÍÖãà:/â˜ó]¶ñÀ¬Ì–ñ2oÐÞwXÑɾãÚËÛ±‰Z)k×ãùE¥Ô¦Ðš‚zùùìãË×ÿúéò"„äé0Ãñ:¤?¸Œ²F–í½ƒnn/;Ç C ¬óÃ>¯j¿‘µ¿\ ·ê;ñȪÙ&Û= 1Ç)ØB*Çg×  HÂ[óû Úß81‘Iâ‰",Ñ^"r€Dî.ÚÇÉôýÔ)k™Dm™où€P²ºçý!ìlpOÈöÀZ0 †¯„‡+AŒ°Ö=bíPË¡’ˆa=apÌq°ÆÖ†‚j/9¥%aˆ”lh·©¥mžy£íéKú#Ö:g£-{BÜ«1¡à.á‡4¦Qß¿¿…‘ å0ÀìEÙSØ›ÇT˜Í³ûó3»nÎCçÔǵ»‹á¸o«º¹!ކ«Z<²+¾ùsEƒ‰Û‘f·©Ù %ÄB¨DiÌðâÄôM8p’šá]îýĵ!Ä@ëUqöq>I9¥#ðD$5ý·eÕoÁ_€íë(ÛlÜ`Ç¿§¾±‰p·Y×SßÀf]Ðd\pz„À(_qÓ}Ù9ÇšÒèå*¤kmcÄx—Ǫõ¨?;Ÿ ªÎHhv1{,RÓF†M¨T#ÆŠ])/¬EJ8×ÃBÑãc™o\yÁ½ölƾã^^à&þä$¶žM ðí!¢±Ê.4fÈú;'µ‰¼JËÈÖbbü”U`¤•<^={õŒÅg¸À‹³ ××Ù˜ÒItyÓüjÕ%àmé"æÜºp'è…ßNx¢21´ak½“»€¼ŒÛÐØN`ƒqŒƒc)eô}¾Ê0ˆwÁ§‡6ç—lÇ×/‡#àþ r.š¸ÞÙ±6Ki±Z)ÃO9¼7z7ËãÞÏcI/"щRO `85Cýó§Ë#ñ„Ëá´ h”‘¹GÆÿÕFESMm´»Ð‡Ÿ_õžÂ¾Åù&„íÎÿ«û×kÅ ^;Rc³©ìºUŠÅ6»Ê¾íb?"(¾v>p{*Ö¬èÿÍŠ¾j±NW¬K¿µòÆÉ÷å/®ÕŽÕ“5ŸŠu÷ëd¢Å:|îãp‰ˆ+u؉55¬§ÅŠQĦ‰Å¦¾††Ý³Mñ {§ŠgBì¾Àüqí÷òmBÚrÓÔœb_BŽR>sD]Ý0”„1yï÷€0eÝ—×ûª.·6Gý÷Úy…Y#-CºfiÛÀ\ë¸H—x2=(«ÙŸaõ úE/,ÒÙݘÁÊà@—¯&“ø¹s¯h×`×yqT}NDÃÃúœhêsòN=ÑÒÿ.%j¶ endstream endobj 728 0 obj << /Length 2409 /Filter /FlateDecode >> stream xÚíZYsÛF~÷¯`å ¬‡˜ 8»±,yÄŽ#Ê®”½~€HHÄ (´¢üúô85¨ˆëÝd·\%‚˜fOO÷7}O\ø‡';ñ)E“åæ™«ÞæWýpöê6t3 œµ(_œ?›Ÿr>Á. ÜOÎ/Û¬ÎW“OÎñ:Ü–Q>QJþ|:cŒ;?ï¢]§WúíÛ¨œáÜÊ?Y~]Lg„¾p<>ý|þý³“ózNÈž‚JÊû’úmI1HL<Á¦L ûúí»÷ç ¹ëüÔ#mb87sx©ßjîµi8ò‰”ŠâŸ.w—ðÊŽ’8F§i*¾ÛÈ¿pváhu'»Ô Z&aQ©h›ï#/ð*>KÛVQV •G7»¨( Í>N5ûréÅ]QFýRÊÿEŠ-ˬ'O¥WåÚ&ò@³ß±]"î×Ù”í ¢x´ª=Ö¦$.X4¤„Ûøa‚0Á•kµYoKŒl¢ÏhÀQ„.T“¿Üï GZ½×ûÁf„ƒ†GQÁ뽋(ÿ/#½ù*Ú„éJ>3', þ"Qym6'qVÛüÚ¶_€<¯}T†#=ätm‰1r]Üðq‰UõXQý`Sä‰z¯MXæñ¯V$R0"®6hFÑ5ãõ)AÄ'£ØŒÜGõº`\ü;À¸‰BéMHhšÎ°“O±SÊuÊxéUíBÜaðb⃎ðz£´|ð×uG +¤ZÈb±ÈÂ#öö€¬ l²4زLÔúÛרƒQì¡ÞÍ@Ìñ×ò£>G Bw¹˜‡0J„è—‡W ‚ cA5ráóK\Ä m­wÃhöÀ²t ÍËÀµÌ ÷‡± HâA,Ã#qÉAü/õè(˜qûÛÁ {5xÌ€>ì‹»èûðTP?“C€ƒô÷мÙë×OÈ!™ðD™*Èk¨zAzJ¹0Ü™TUð0¼k’BÇ—†.èÐĘ́‰À`n}þ¸Õa&aq‰Ï “D/6òšl ¡®¶o®¶¦*×p^ØPš@Qeà‚› îµµ§­<ó\×y}i³6–Þ\°þ9÷1³Š¸ÓÉ—Õè”·s¢ƒ1 2AN:êˆ×Öº<{¨¾uªž(y§[{ªïò ¯òßêŸÅº PS<ò€7 ܰèzƒ¿kµYõ“O-}‹ÕH9¦/ìÒŽ¾|¦ôoæoæxv*w8>]èw5|ªÔÄ=ß9_W?¾Ü¥Ë2ÎRým•išÅ4+ ŸÝv +p«sƒfC.D» Q8Þ%e¼M¢Yƒ\ «4S V’·’ƒ1漌.CøV¤IÐîË ¥ì%”Y ¬ª‰~§aR•5 |ál÷«[Ìaíê–S¸KìéÕ­WS|ü/ªn{EÌ ƒ:®AF·Ÿ2£.Pð.8~z>ÖS1”¿$VÙ1bœ )£fmÛ³ÿ²{4Ó®b˜‡0«a÷cVwªª eªeêè»Y-PI²]º2j»¬ö@ºÈPàïñrg»«õvWÚï*¡îýfÄÙaõlœÎÙ_ZÑyTè=³´0YÓÚï]ë'§'g'oO¶{ 5“‡#ÌŒ²°o >ÛÉJé(ÌA7$ð—H~zÎáo™Ìn‹ë)‡lI†>—9ßgëT~ ×Yþ¯05 ¯Ìïˬ,5Å«<\‡³®”/ßþ¥i•€—T?:Fzm)ŸºŒ¯lùŸÛ¹™?ïB†ã2,ã*xFÁ8ßD¹Íˆ ªÕ@Óå—ü›.¿'MîŒ@UK+ËK{¿ "« uè?cøA•mÃ"‚> stream xÚíYYsÛ6~ϯÐô‰š±`œ$˜NZÇNÏ4œL&ihŠŽXS¤CRqÓ_ßÅÁÓ%%J›i=ž±H` ì…Å~»d‚áLB< C!—“xõëÑòíÄ<<{ü€XºÎz”ß?8>bB0 qH&ç—ý¥Î“מïOßœÿ8a2D2a=ún¬“4«æœž·JwäDQÞbŧ}V‘HN|ÉaÜìû,ÓÜ€„!"ìàZ Žòv.¦Tz7ê_RNgŒq/Êêyëëëé¬`Þ…~+Öù¢2En~ëeb>­>Tu²2ƒeR™Ï‹¼J,]ºJå(ès4Ó,Í(A‡†±yb?вªxèƒ $ACÞó¢Š."½ü„JX¨ÕŠ­½^ŸM%•ÇuÚ0~–fÉ»¶ZE¡T3Ä|ŠfÍê¯ ‘²BGä#´Š|™¹Ö! Ñ®räZeHòr}ežmæ†î³Ìܼ™‚Ç ïóó.«‹êÂ.ûö 8â¡h>û ìb€#Ê[ŸØíñڃ;…Àt­a¹x˜X!.#~ˆ„Oì‰"÷^ô?ö¢ù¦5üÝ×x±Éƒ­ž( 9ˆí÷ŽxæˆÃG+ðê㙃/†þ}X½÷æÏëÍ{¬±:€,¯>:јQÌ‘OÄI±º^× B¼ï¢,Êãd¡Þ¨7·i¶ž±ù¸zV'Gýê4|:#ž¥©—e±~»„åÌ»ÎðÕÃ(G×´£›§Ë¢t@Š8+ªdqdŽh@'KfqUj; ò¤nAEQ^UܤõÒjˆ ³,y|‹Ÿ~r† †|Ù:^•”ïÓØÂƒX š«½ê¤¬Üð‚ ¦29aiÓOž>?Ÿwfíè•Ä!ÂÄ:ú-…IÃ’Þ½Rÿ/˜©¸4Ò— ê¶JïNêðU1¼NÄo¥DüŸ>áxC: ø•ú£|é×çç;æ£/‡¥~2§w(÷ãªý;û;„ávËÆ@Œ=;ÿ€{·,n‰tzvúìôÉÉéÜå‚…Übß1 œ€‡êþEs&Zب! æxúõ½Ÿ£¿@wS]Mi…Ê0÷~,–¹!|-‹ò(·íwó¸¨kCñ¸Œ–ÑÊÎk-*‚Ÿ,¨" Ë- å 2¿óD‡µ8½:ê@óíc8ÿm™ #­!H™x{¬Å°,àÞScJˆi+…rªjop9¦gÞ·>TúÁ×ÏUÄ5¿õšoãóñdˆJ•¹÷ ˆØDâ¬rYB éRƒ#¥æ=-í=¨s\*™÷}”ez®‘Pr4nÿ1JÈ ´‹9ßÒl¨g=rÓ‘„«ñ¢šÅe]_?<>¾¹¹Aq…n¢j ©‹%‹õñ²X%Õ±¹Áä„Ë¡–2p)p§èø]u}<‚ޤ`Ê$C¶Eˆ†zÖ#w´UÇ‹öï›rsHá:U¯5$¶ø"i4–¨UJZXjx‡¤a^`ÈÖ¨_mÍÑ»ò‹ZÖ¸¢-kØú‹ó2¨+R~µr…&b@h¤r¯iטÎc“ñU÷MÒ½»ºo’Þ{ÑÍ‹þÝ&éŒÀ]-¨¿¡ŒÎ¹ß‹ãœmJ¡gl]_ª»¤4Ïm¹›ÂÓñ’üT¼+óaWìl±[n*v3á#Ö‰â.vs1®|Ð é° ßBòªË…[C¾¶ŸlH:á2nHâuUC¶`óh+1ñ’ÊÞÍ¿j,ÚëÀ´©wqí=U6wöºÃóÉÂ}å€è!Iþ´‚ýÝÅ’øŠ%ýr˜QCãàŽ½ë=vm%-…«GÀ¤ÂnõŒ²ãºðü,|ÏÝj i_ 'nŽD°C1™qðÒpˆîw«øÇ6…Û±VµQ»]‰®Ö´Q»ò h!°uËN$*Ë#Ý:˜:Ò{´ÍVQ]¦:{J ¬Þ…œ]í¸±œÊh¿vÿù;LÅ6æƒÀüsx£ípÐЫl‰›xWá¦Ñ³æ,âÍÞKh:"ÛÜ·3J/8ÀúÆgñŸ•J-[{(Ä?€ËÂc.+)ßê²,ÜÍe¹$ûuvîpÙƒ›&ôù¸ž{`×Uhúo©yƒÈ endstream endobj 744 0 obj << /Length 2169 /Filter /FlateDecode >> stream xÚíZYsÜ6~÷¯˜GN•7èª}ˆ%yãM¢x¥±*µŽFZÃò\’Jòï·OqËrE›U©4žF€îÆÐQtG#Í9‰…%Ë‘íÝÞŽ\ãòŸ/¨§ 0lQ¾ž¼xùFÊHÅt4ùÔf5™>§óé¦H·ãsÈWãPü»LË4[ݺދ´3üŽëíç|2k(=þ8ù׋óI=¿dìHA‘òž¤Šµ%¥Ô3RFÊ…ö'T›NÍ4pµ¿F2JN>ÃzÚŽö’£yEÍM±¶† ÂDMtê)D×%„+Þð‰Ø Î”0]«üà@0ÉrZl³?N<¯B/šb('T>]=8 [ö`rˆ#e„²š*ÄSoRJ<•î(AAx@iLDæŸßOÞ½Ÿ\ iu)Y ŠG‰¢£qK_ÖÀÒ¶øKùÅL»º E¨Péëzp»‰¦«™Û@ÊͦYI|ßj6X-\Öh/æÛuy;ß”…ãìVìº\Ír׸žk/—]´0¶HW·Å|P ³D¼·úrH=äú>~˜\SëPΙ#¿|\‡RÏõïàÑmš;ÖëUž:æE¶LÝüè^=à^ݸ—ã^Ü2¹z{{+›kAdŽ``f¦ùUê%Ÿ.òõ«AKKbD­óo«$¿Éoì #f4Q@2F$ó‹õÛ1œå*)²õÊñ~“-ÒÃ)‰¥dr¬Þ €"`m€öþÒÀö'eÍådˆK—¤½£|›ËÝÒ°/as„4LjÈàînX&7žsÔv—2„ÑxàüìÌß9?/üìqßêz¯<'+гAYÚ3`ð“= ‘,Öyê¿aÃûrQdîà²}«´íu—M÷zT.¸Ì3ü~ăOÍÊŠX-7‹téwOQÌS×ðе ¯24J‹ùÚŽûŽYš'Û̧#3?ÁÊMˆ{þn׋éIãíV¸ 9” 5`' jVýuûÎÔT²a³’;Ãyë'ç.ì°Çr* ›Fâë¤å¾šiîÚ¨ŒåŽ>ÃuüàåržBªóùwÙvLÁåèhT†À`,‰ä­ÍRÜ(˜Œ!×Kd46«,™.{\¦^d_¸¾Ó«³pr -ñë<Þ•ÛYé­ó~•¹d C1þÄ}Ö.§ÛûæŽå'Îö^¨ŽéilD×lSÈ4­·1ò*oËܹLŸ¸Òï Mz8}{qd²q±+¹2GÅÝ {8™®ƒ4±;pÔºZíŒõ@æ ìíâà¯8èÈÿÌ‹t9¢SÁ!ƒ–Ýýì83xOYpØ©-4hy|”œ§Û»,ñºÍÒ¥Ì'#ûKcK!÷Ö D–;N«nÉ€÷Oš§›–÷Ï '†Å]Ç_} Ç/Ó©¸ZžufÓ$-ˆÜΆ“)¦‰0ò¡‹ÂaC*')ú8Ð` ~4èc@ƒÃ“¼ ë#¡ñàò#‡w̺üØCÍ0b¤†E=1¶ù× æúÉ#¦_ 0N[ñ j|ò JBòØŸ|ê!}DoÇy®!5‰/¹=ľ‡Knÿ;>¶ä¶£¶Ý²væËó7ç—ç§çWCKÓtî„§¿FT2˜-†U™ Öiê²7ÅûÒÍ k.F&6„oœâùÚOÀxT'`@ÒIr°£“ä ±Ë*‘[“ä`¿Or sp¹dè…h¯J— Ýd@Âg@ÐWg@ö­Jz Y'=˜ñìÉv˜UDzîh¼s˜±!VL<÷ó»±”ÁtQN]ÞŠ}×hâõ’JmT |¶R1í€ÿmžc $YP˜F*¾Évlwl”QÁÙÏoû·…Lc¥SX¤H €ÝcXQ‡-òûÍ>S—XE„FT½„JNúÓà'£(b¡vò6'SoAKj×PšÅæ Hòàeç1ûŸ, þu¹ñVŒac ½ªýz С\Y\ƒ¬î•T¯TuÆ÷è0´~b8£{eš¶8W¶McN´aÜPQ‡-ò7ô™ÚÙA¥Xˆà»E‹KFF@é±TÁ4[Loõ¶;ïË(¸±‘ïq2VÔdì3mm1ľ(€"5E¢ò%D=¦{Ü6ULöåN8éˆH#zh‚ÕVÖÏО­“ܾûºÀê<‰íÛøêCÝ‘ÎÊšƒÈu“y‹¥Ú0˜!’Ë}!kñ¨‰ˆâÍï©Ãùù{LëíŠËà,ÝL·EµÏ9kB°ëªV'\ÑûU«²þÃU’¥°Ëå'î «Š58äŠ5æ~±—Sêb™¦.±4%™ËvIæ»òv_=fıšñ狜¿¢ŸožR ~ð"”¡Øá›Èe{ŸyÑÿ#ˆ¾ÙEŽ"=D j?ß(>ñ1øUr,¿bW‚(óŒæg4?54ÿ<|E@Z €Žï_Ô—XaÚï^»gUµÀ¶­‹×þÞ>ãàû> stream xÚíZYoÛÆ~ϯÐ#˜ãÙȸÇNÝÛº¤EÓ<ÐòØ""Q —4Îýó÷ÌÂÕ”¬$Z‚aQš9äƒYž"&ë0ƒ¼„ÔûÍÚ¿‘Os;ý¤“t¼,5\HååX‚Ý—º‘m½^'­ß ëì¶CNp§[‹Xõ•RÐeĺ*Ý1…¡€!r>ogâ¾h†#AFâ+TÔ~‹|À }¦áœz/–¹0 þ8†P²ž™,ã«¥rÍy_FÆ5&ÝWÆŠúûLmÐ1¡æ:†i27%Dš¨Ù†ÙÄ—#ýKl÷&PÔd—p›ãã D™è?ô}µ¢àsžW?ÂÈ+ õ9Î[½êº4Ïcó¹)¯ª_@\¨ù"Sƒâš"s×<6×7CNCCÙÞžrRcuL‚ôü!ƒTÔ~‹|À }¦UVãpØÄY±rKh#‘IÉœHïd½r• ‹5;…·ªzÓy¢ 'Ù ÷6M* ž5 j6|f&ǵ›Zê–\/F&©C©?•©«—ë‚*lûÐBo.¢ôæ{Éj³TÕ¤rÛf °&MשŸ€è²­˜¶ßÆK–ĵ* ñZåó,qKkû~âyìï“8—zî:ÍO휠¨ñKiy9Ò ™á@Á_¦ Ì—/É`!×òмVë•*²dn_|i€Æsm.Xéè6â]ÀôλÓÓ¤/æÞåZ]šÈš`®óÄJkš|,•í1ÕU¿pb««Ñ¼¢cþ7ÕÞ£±×E]VÅÖ²ÑörÔúüôô´åYœæ±±¤óŽ ?3‡«–1NÑXgkò\H싈ßsбÆRNŸH@‡®˜MUµ/‰ôùÐ8¬ñy=é<¯b7êGë$óü*¿ªš€àöÊ:•Â@,ŸB9wîðîL'ÅÚqõ+gÉR½o2AÔx#1Ó8׫ w ämˆ ߊÚU,^ïó¤4k©£!.]’á›Éviè×°yiÞ|—njßì!Í{È 4€¼yX—pœqs‚'’-»C ïÎîÐE“/º> vÎA€…½]Ûž,m?Ú¶*×(;¤½¤ppéƒKÿÝ.=ÝÆ#ÜŸÇå·‡è sÞ©û‡¨8DÅ¿(*¾‹Çj[d‰‡"+’ˆ‡äPo‘uˆ¬‘õ]sùã›ëžë(Àƒ½“'·jës©öâUÿ|Yï’GÆX¯_Þ¦Ï3<ëÍrŽí~?,VÍ–¿^bqÚéw›é¢ÚLׯسvø¦7®ï/È›ÓB»£lv‘í†òR¥·‹jÿ@÷õ¶õþ `¼T¾ÙÒ¶Ý÷6˜ »¿’b1tòG%kŸ ÿwR€Ë6GgÍe-‹Þã^j1ç›YÞìÓR3,ûÎßµ#‹DH×WwtWÓ¸{Èо4|¢DwŒ¯O90ÙyÞû¯»<íyyH>ÕËC6ÈæÅ:뎭ƒl8.@/"»Ã·wÆm¢0 ¼ $û2yŒËLïã`Ï Jò ^PúGxÅô‰y!K…{^‚’OàÔ? .Ÿ˜`0”Ñý.ZÉÃE«ÃE«o¼h¥'ÿñ÷ÿ" endstream endobj 765 0 obj << /Length 2886 /Filter /FlateDecode >> stream xÚÍZYsÜ6~÷¯˜·¥jM R©l­­•SI¼Š-)µ©Ô $1žÊ$'¶üë· žƒñȵ/[®ò€`³Ñht}@bÁáŸXä|a”b¹ÎËÍ3îfë» .¿{&<] „ñˆòÕõ³¯“d!8Ëy.×·cV׫ÅoÑÙ}ñÐÚú$VJEÉéI¬u½ÛÙ-·w4{aÛ™Eñ¿ª~ßœÄRç&‹Òüäëž_÷ë'R>QP¤Ü“4•cI…ÈX¶H3Í„Ò$쯸à|G‰a)0uöìe[¬Ið•](ô#>êèwžðö¾Ü¾§·m¹±Ï‰ála%X¢“ާ_4Õ52žâw./Y:a$™¢£âAᙑ¦£xN‚5Ëb]Ô ­`tÿ²·ÅnÝÒÛ²¡_Î)P®ÆÎEoœžbi ã\OÕUÔéòhYm@p»¢§]ƒ.E«fcJX*zÙ¿³'‰ˆªmërIË^}Ø5ÎÚ~dT9Š–^¾êÅÙÛÎOÔ`¦ ÿîê•7,”(¬Km˜Öê¨*{³ýöÛ°. ™éRæ™×¥S ãÂxÕÕX¿ÎÊ*q0¨]ù *…Jé1ɾ ª\2#Ò‰¦œ¢Bú¦€='•9}s9õ?ùÕŽ£¤wã˜þÅÄq” ÇyrôŽ/kÛÛUÛÆ¿FÄs¢£koÓž«t.Î °²uù—“——:º­«ß^>Þ^ª˜Éú ¢ìGÂDo@¸á)˜àýq†1ŒÌ˜ÞÈÈ,@8½)ÛvmÿÖ¨o\øx:Îö˜õ²\®ƒH¦š÷Hþm D„Þi.BL&1ãÅ!zoÃû’t$ñQ&¿>!èx¤,Éúí^îþoT<D&t:5×ø¨D¿¥)Ëa’œÙ‡Áwa+˜D‰÷1ÂÓNDz·ûj®ÓƒÓ©Û§']Ï¡CwС¦1ž÷€µºõ¸j·'àþ˜Ò6ÔD6çË}Ðü1肊¥ÎÀÔ‘X¯íö®½?¦(0ŸY–ryþúüòüâìü*”qe*&ðAÊRÝ©J˜ @’¥ÉñR™DgES¬!á‹SC—~’~uôïiá³{oú®l]|þ\>Á“Èsf´ÂMjðK 5O Š/h™‹jª.ZDRv²ÀŽÓÄX^BûØ`¶—Bäº>Étd—øÑý‰ˆ¶åÔ2¾¹­j˜èl]5Í89$ðøæH!™&ñÅILy6NG &\çççÄÇ QÛ¦X¶%„Z ¢¥Bþëqü;£¨]7¨WÈdƒö:ûÑ©ÉxŒ¢™\;ý°Û‚°I&#ÉyÆæ†Ò` !p&µ9RdtÔñˆ!2ÍxÚGþN ½žD:n#u»8p®£ð§eëÊ•¿N:95úí¶2òH •€K¦RòÀ/¸Žè=† òÊ P8ѵ¥ñÙºhb‹jÆøïB,ðÉ×ø"ÖRD;ä —pFå ŸŠ»RKNG‰ƒ=3Âɽ&=q¹Ý‹Vêr!2ä…ã>­òû#ª§kí4˜A0ÞŸ"#—I³/ >3nù5’ËÿAòQ›Ÿ¬<œRÆšë½®ç—wâ Zn##*Ü <¸p-Ÿ¾“ ƒºØ+D®yTW»Öešg®€“V7 ”âs ÞäÖ8Þ}˜,b³²Í².½¹®F4*B=^DîÑ‘¸Æx/,ô@37øqS®ËöÑ£”ÆžÕ,3ÞP´ 5)TâC~™·!}™±ŸÒEA ÈÚBÕ´ô€i÷Ú¶}w²w[|(:"_hÅäQCí ‹#‡¶Kl­ÝºTnõU‹•ê¬WñŸaÛÎÀ§LÀ÷¡®nHéT[„|@%[Ŭ9ö6¬º»•ÁSËoþ> stream xÚíZKoÜ8¾çW4rR‡oŠä0;˜,fw6;NœL€ŒJ·lkÓÝr$u^ƒýï[ŇZ’Ù¶“Ù=X )ªT,‹_=ØlAá-,]!ˆ•Åbµ}@Ýh{¹ðg}À]„ùˆò/g¾{¢Ô‚Qb©e‹³‹1«³õâufèòüìo QXR \Üè»}µ¯êÝ%¾{ðÓÙ0âüž’ åMQìL]H„ô“¾ÄÙæò*Ct”ꇶ-—¼È>-s!DÖ\`+³÷uW÷~¨-ûºé¾÷Œ43b” Ž¼âdz21ÜDŠß©¢oá?–‹SR°"’ÖŸ¾¿ª¼HNÌ÷ø_Õ–—•»[r“í·8úf™»wã…¿Îsè?¶ªvøA´~Qb²(«ã,Êñ6%ª&”‹HAÜnçÂp¢a»s.‰Ü¿ûmYˆ d•…ÍVå:–f«f{½ï«ÔäE{gg e°©ÄQø©…–‹œ-Ì-B—K¶‘]´ÍÖ âTŠ‚´Í¾G‹t£×mó¦|So`ß½=à |Á²²_²¬­?&µUp¢ŒŠÿšØJ§×þ•”Y‚­ð±Ìûn…N™%æ °w»Uv<Á¶g(@A˜bA/ûÝ ,öFX‘uU5? @ »Ðv>ºýŒâ|D@ŒK'Çëuã,x•Vq~‹§Eví äf.×`3ÚÞS¾H}‡€s¦ÁÐsÍevvUµÕEÓVA¸îL¢xÒÛ8ÊYîÊͧÏAh†¡³«œq}ÀSÛ´oý ° ßøæ²ö§|çÏ3Aâñ¦];U5×ûMöÎuWN*£ˆbƒ‰>Mšž ʲ1LUä’œ¤¸qC¸·sãÄÄAVSdŒ:às’–Ü.šÍ¦Ae|HlÎ(% Ï;€#¥6Î ®@!_l}äE§z>!zÍ|Ë}H{>ý*ßÉG4R‹Ø1¤a 4éÑó¤`/'sl•þ+ª(ùÕëžþ™oN}óê|ÎlÓtÕYù‘§'¾}Ú0ùÁnÇgˆTˆU°Q'#w5A¦±»ÈhE }1‘H-€y|Pàµ=*¥X‘’ lú‹Ex6–#4¨‚B2À>%Xx`ð@éÿB‚Ó™Â0;L*™ÐÃgRþW%Aϫ۶[#‡S ­°&é*dâYî‚ ž!ŠqÃ2ðšà¿Cÿ"% §2r䕜Y¦&‚yŒâ£(÷ëªó¼û8á{„ˆjÕ7m7ÌêZpß›ú³ƒÀ.é5¡bp/’ÞYJë½³¾%ž0¤Ð‹QÖïb)s,–’ PÞJñHq‚°.³¶êàÁGì:§žõõ6‰í¹Ð`HÒN`ìYb°Ÿ…¸;n‚ØNBDj“Š>uæÂțѧѧÎVû®o¶U›Þi ü‹k?M ÷n¡ÁÚ šQ•»µ ¿‚ïò Í5å HP?õ*!€%T_¡5¤âÙÏ» }PLõ±Ü^oª ÔÛ«™˜ Üq"äÔ829ŽÞÝ3ºT&0_H¬PKB 6[¡L/0X6K›¿´vlÿÁ©Óô©öqÎïSìÌ :¡BXöň‰¥²LÛ¼ð:‚œ­‚l³syŒÖ»´æÄmšã†ZÏŒS¦m3èD¤5§zcÇô¦íŠ„Bÿ’/I X ŸZŒlÁí&ý€?Ÿtªg¾Ik¶ |B1S9ÃÒ{“úSú• Æ‹ûpU¯puWâÜpµrU_^‘ø‡rÛ`¦…Ýp*)äBíûz¨ªêH Ì%æz‚¼gWÎ4»ŸqOô ñnë˜9]1Í]Ùè½Y*px}¿©vvW˜6¨"[W Ü@¦Jê¸ TÏ2t¦ ž9u†Å(7)|n‚ƒ.ŸÁN¹éß '. û4gíŸ>Ôý•ïÉV9-\?]³yŸ”_ ˆg†m=ä¨È<‘£J9h[ªÕI`¤ÎGä‰$pÎôFšŠÒ;hÂ<«§¢ŒšÞ¨s±wõ~â;œ±<ìõ\ï¹äžßnÓ>žvˆ[¼h]>o*ßo| Zípé΄xX,q¶€ï[ßnëqhfa‹v¨}|_ºd:ÿìã¿ø¡›&¾m|{°Gx€ØqÕÖah°Ñ/f²vt ’»”[BJÌ'ÿô;eªúX¿Á¥"‘›·D >-!:ßn˜ÊžÔm×c @êlS…øbZÄð“|;’yÛCç$ÅbÏœò$K`‹# j4Á‡sÂì §â(#{Àž [Tƒ/›9m)ج¶.AC z÷Õª1mÄPÖHK™Æª\eªì§r€m,`.•Š“ÑÚ]×—þãºì«µÇTA±ršÂ .ÇãÝnûv׬ÓÇÀºtxB$Y©àà‹u¡&àzÊf鹟ʥç É Ýa¦¦™T“·ßÁ_~±ºè’•A¬Óðûs;™Ô0…ˆœ)XÙVøÍ­Œß±26œ‹oni”³ÅÝHèääÒN i.@4œ#âÉC!|¸^28p%ä›ç.t1üX¢Ï¸®ê>‡I ¢-_oàd¥oº¾HfÙ¥à >÷QP_›¿Ž°›Ò켃^W’®ÐÝo6Ýô‡‡my˜ §„+á×Õ®éú„ÅÌ8•ø[b7$ÿ€Í‘`P›ØÙãí¯ËuÚ?žàZ|òÜO3 %­v5ÚÞo¸aÃË8¼*»*œ¬v]݇²2šV²…«d"C¬“LtÒU«ÆåcýŽùÃc,Qw³ˆùf¶o'a4Ö1΋쇘Œ\#ª–›È«nÓ“úÚ:t¯är›PXšUrÝ]—fY(¤T+4æúLì“áe†N*™Le"ÔB´?léöX $.ÉB†õkȸ\Œ4vyŠëìç@Úlë<fÚdîFÝnB[vÝ~Ëh³l•¡íÜ%;¤Q{>!ÎhLxÕ´©r”v9ha‘ i |še–ÃóÆ„„L+ç…zÎÄl´.3o$.[*ÃEÆaƒ…¥‡›oŠc7 m¡ôWܼLÞŒ¯ÎÿLÞ…ÜÇ| i¹a÷‡ÿI]uÂJH"Öz”S1s$ñ¾à° žOyì=üû~ 9“¸XõÕµìÿ_)|»W Fã1¤È EÀZ<˜$À11á—"Šh‚_j‘ýó«q>ŸFeÏùþ€>ß} À!8Ð"p$€¦qq›ãø"‡0>Ûüt¾ Ž­«×èX¤B„ñ£CJë‡o\Öâ K/’¿š€ÕÉÁyÿ=‰ÀŠð1KS` §|Î1J‰ü[—!ãŸV©1üù” ÞÅ3øL‹B´GÕìÒxø…C]yÔÄúħú„È endstream endobj 774 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/moreno/research/software/octave-queueing/doc/qn_closed_multi_apl.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 775 0 R /BBox [0 0 121 144] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 776 0 R >>/Font << /R8 777 0 R>> >> /Length 725 /Filter /FlateDecode >> stream xœ}UMk1 ½ûWø–M!®%ÉÇJ ¤dJ)=M>JÙ-$=ôïWöXöt³³2ëçy’Þ³F~ÑÖ€¶å¯=§ƒzŸôóåMBAÿUu_ßV`1B™ŒÈêA ÆÙ =°M5:o‚ËõÍàB_O É3ƒ:Rž•Ñ"ÈZr0£!%ve´>BeHYOJªDª”Ç:D]2E;9cgu‚ 5…ÙÆ¬sÌ&:§]p†ö5—š¡Ao+£Ë9˜¡%@æ\=C[e±½_^`£K˜…½Ôþþç½Õ¯*qG¤uâž !°V*ÞvdßâÚ'F„uÉü+`íÒRéþM®=õõþÝ›‡«-'ÊEDÇQGöáF³ ²Uw'­2Š=ëMäC„„ oÞ$MŽa©òÒJŠD,!.Þ‘›7ßµK&e¯py'¾<1FaÕˆ>&‡ K«†¾õºFí'­NN¡ô[ŒÆ–DïLäÎd?°ÜÌ tÒ*€èøÈ`ÑljºOcpͧÌ2;²8öjcë1G‘…Ÿ@zB:)Öл^ª¨9ëœÃ̪[8'ÈpÎq2ÂEèu@Ê]qœh­ÃÆ=5÷@7r4E˜•’ó ÛÞ"#ÿñ<ÿßÈ…üõÊEܶݳ¯Ïì(Ì¿Ûc:è;¾—IgŽBAïžÔ|]ƒÆhÐçÈþ£‰ü5ìjóáöær÷K%68“×»µ¹þ²½¼PeàVëx€—µÙ~Û–w¯<_•TîF¾:mª[P66Xx‘#ÁLs±nºÊBàÞ‘¾‚lÈóµU¶nçˆ=™çfâû¹l]×­ò¸PŸvlÕúuÛ«Œ endstream endobj 779 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1225 >> stream xœRkPWÞ%d÷VcjI#D4DìX±‚ލe|µZÐ"P(¾QD @B Ù$JL.K  ÈC¬8 Ea¬–¶¾Zk©ÊŒŽŒ§?ÚRê»é¦3]¨3íïþ»çžs¾Ç9Çüý0Ç© ¥¼0"Y¥ÌÌ›‰W0Á8³ÈỸ”÷•w=Ÿ‘ 0(àAë"¾$9ßB¥o"Í|ÌÇ£Ò]Ë?IN_¾2N•B­ÈÎ)’E­Ž\+;|Bö:#‹—*²ód˸‡V~\•¯”çíR(k e³´²dy¶æx¦ú¿ÿ¢ý?| ÃælÍØ‘¸3)eMd†…b±0,[…Ebk±·±L„Íå€ùcrì .Âà÷ü¶ø½àåòºx¡*¡7 ¶ O™%-¸7Í#>PUZŸ3ÎÒÌwAÅ{ÔgJ`—™JöÚ$:´ÇCî-vuU¹«B® 7ø¨‘ wå×@JÕzKšèP-é3¢z1"Ql–Àëׂ£{Ó7[ªTÔÚ­Aã—»ï@pwèPB¶!G]¢äRr»9ÉÃ|î“<4g:ÛHl‚z§}0¿šÝ¾šO‘ýí5u´ÖrC¸mÛõÔfûlï#¦mG/'yŒ -«³v›Ë÷Ù%¬…@1(þ§ŸûÁ'’©—¦¦kŽdIs†\}|kEÐÀ¯=Ý÷!xþUrtÌþ÷¢£BØmìn¾‰YH )7“V¸‰¾9ÏæöU Á< û-Yf endstream endobj 782 0 obj << /Length 2054 /Filter /FlateDecode >> stream xÚíYëoÜÆÿî¿âÐO"®¹/>b¨ã4mŠÚ°v8þ@Ý­N¬xä…äÉv‹þïÙÙå‘ç•tNbâ>†ÃÙyüff/øÏE²È¤d…ÊË͓Įvë Îÿò„;ºã å7—Ož~§õ‚'¬H ¾¸¼ž²º\-ÞE/nÊí`º“XJé¯Ob¥tt¶3;S5kZ}e†‘GðOÛÝö'±PE–G?yù·'¾¿¯…8RP¤üLÒTN%:eRg‹TKÆ¥÷5~òðLœ3­ `lIþH$¼X¬HEê)¸^ˆ„‰TY‚dðNÌ3VHI‹ ²O˜–v%Ü¿ó$IˆÉg‚s–óQœ¯C,%K¤'òÊæ¥í¡bU°´Èàh 9M;¾"óÂJžñöÇGþÑ*Á*À,§¸ôo4ù<$*8gE¦×œeÂÙôûüLðh¸©z5èqÙèq§¸*£Îü´3ý`iD´,Ýkµ)‘îÿÏÉQÿ©̆¯»Ö–¦Abr{ â´ü¡nh´íÚ«òªª+ëøŸh‘;û¨™ò³Œé<õúÿ y ¥Jí©t´6™íK§È£¯œÍ¹*>7hð+š)`z´K´  Qpˆ,û;ja ûWî)¨Ióè'¹´fS<êwÛ-|lÞ»•á¦hd>‚¹š²¦Ù?Û«žFe×U£é•ˆ<ýÌÆŠ[«ÑÆ@ØÀ˃ Ÿ%eI–ïÍ%4‘©:?bÑ5Œ$¸BÌY*ÓI:Ëńê!%Bq.6 ×Ïð,ý½3^†üAfbzMKˆNJÓ:*ëÞ­ ô´jËPmnC¸ýf…IfÙsÈ ÇG|ÒQ/ªMU—]ý mªoé¹7jÐvÛãȬh¹9È*§¨77DòcÂU×6íf»Nƒ%((Îqó®ê+O×îè}Ø´šåù‰oÀ%ö6dˆœ%*›v<ï¨ÂJ±<ñ"ÈœOŒ‘tb’2‘©y,ÑrŸch΃.gáÜ> ±Õ âQ@yœ‡s¡X i³ò ±F<§Ûõn€v&®éì»)SbÔÃOMÛ[?èƒJµCO{½k–CÕ6ι{òíktÒºnmîé]øA½0Í`yÅ€tŽÏ}QõŒF5ãã]BÏ„I?À8Åw î^}ÿ,”šërsµ*>ÛǼûvöÚ^O˜‡^ŸÒ*ñ·XHsLJcPVðtÌbBÆN!g<ïûÝ·l‹L2•ÜÌá¨þÊTÔ—?2Ý]µt“¡Ú˜ž†¥{VÛò¯n;sWµ;·m>–›mm°Ì'DI„©2„Á•-&i ÅçaöÁ™«ÜžqB4[0_(!çaPé9l8€º›÷„ê‘ÉSÇò@CwÈÔŠòne“Q´ŒQp„TÖ€pïO í¶åÚÁk*%Pr¬¤žúI™z/žA0áo~/þrð7àÀÅ  ¿yß½!‚szœÑã‡÷‡h †Gd 9ø>NöpéðóÂ=ÔýB@úf&[Â2=bgŒ'¹Ò¹±gû¥"("=Ÿ‰ ¡7@b‡bH¹ g\‰âÿ*SÂÙL9Í& vË<5"rý"üð„Ð;dúž„¦r& ³ž•З7.$ÇÒ—"µoiÚë«".¤œ”E_ˆ\•‹E@HN¥˜²©±_–PÞS;hcv½îÌÚ¦9$™e@ÜÇ èJ=ž¦V¦YÔ>_—Uãâ¿rG­\ÛáûÀ¾ºª}ØÎªÂ{‘›ƒb3‘íÏß·õ V¥rJxS­oâÚP3Yï+B§›ûàêÁ"Ÿ[ñŒ@Èæ¶iWÆ‚H@à÷Ñ}GOÝ<…ÿñõòºÅ4âxn§³"­ûÌÙL+ˆg5ÇÌ3ñÛ;šxähîdò·w2€»ãÌö¿tG¦Ie÷i‹ãÍkÆ?à³fŒ„˜¶qG+꾬ýow&??~à¼á?Ç¥uPXÆxþ³“ꯙ×õïy}´ÃÏÊëpi‘׬Q…L¸ÛpÍR{ÊèEÝö't <¢—»z¨–uÙ÷4Ç[$‡Žþ@Gó4Ø‹Ò]{ꥦªxï«gúñ&'Ú·ÙžCyk³\C4îf6þjº+],‘âf¼†7ælNƒf ¢¤ã5Ì÷ø¹ku®¯Äo½4¶;ƒ¥·xÓSÖ;'Ûó:v¥ã7¡uÛAÇRª›„¾[…•‹¶ÞQƒ3,p{ÿ3®¾:ìqñ%õI+SoDZL˱`À£K{GE jª¥íø×¹qUK7Ð÷_\|_žÇØxI­Oýñˆå4÷|k Ä¼Ò¨ôðUÞ ¼ók¿‹eeš¥é]÷oC»ÕÎUDowÞõþ§ ÕXßY©¯hµ[åE.î¿Òý»|ÑE_X¶M_­¼4ƒ/W÷އ‡­@(úñPE\ú8PŸ½¢=ׄ[F1¾oîîÐëÆhwõ DÎ|Yä*AËÒô¾yý/kêÑA endstream endobj 785 0 obj << /Length 972 /Filter /FlateDecode >> stream xÚ¥VÛnÛF}×Wè ›½p¹d>ô–ÂEÈ–¤püÀH”M€›¤l$_ß™%EÊJR ŒÙ˙ٙ3gW‡ðRî¥X%Þ¶Zp»ÚÞy4¸þk!.`8Aþ¶Y¼z­µ'8Ky*¼Í~j³ón|#—·›¿=•¤,1)D±«‡üõî-þÜŒh)¿ŸÉã1ib¦ÁpÍLœ"üÕe¥¼?šÅÕ„±àìFž«c—öëâîÐæËP)åk¦l P»H˜æ’ ë¼}ZÊÄÏÛnFÂøMìgõŽ’Ì'®y™}^†ˆ-óÆ‚’YR1¡ä@ϯ«75ËTÆ,IGžs&””Lˆd]¾]ŸÄ™b”h›w”å¶/¨´ò d/¨¼ ù@\Qâ"ª‹ÞÍ»‘Ö D1þ.ï.`A'`€g\êñ.¸Jç:¸ ©¤ƒÃÍáÖWÐ} ¨ v6÷¹å.ÒÔ °(#´[†ÝsÑo‘¶{  º™Ô¿ÜÓÞ³%œÆàp¨†1™«ÉæáPf}ÑÔ´Ø8_Lm›ÃÃÔõî´ýRøVó$D€6¡{Ž ÄH8–5át¸ÙÛh*£!_YFM›$XªH »¼¤ùÖÊîv<«³òË×|G[ÙxÔ °nP>/Font << /R8 792 0 R>> >> /Length 1260 /Filter /FlateDecode >> stream xœ}WËŽ7¼ÏWðhX†ïÇÑN‚œíàCƒ#oR`ïÉï§8ÓjV|Xw‰ÝU]Cöp¾g½qãý=ž—?VóõeI¶†²ùoY7]jJ¶ûdš‹¶´f΂Ôä­«¦ôd}øëltÙ”èmŽYâã’KCB$û¶fP™ Œ”²%Pî«u¥ÇÇ…E0"ª©Â¾‹ãò×ò¸„îmlU²ÎÂÌÈI’,EŸc³¹CêûˆJŒäêlïÅøÔªmÁäàlˆC¶Ásx\|,a]O¿Gï×åœN1ŒBzÙ¶üš ñm#È ÖLv-ly×2œ¤³ð2r„¤Ÿ$I5¨×hkn“AÉ>y1¨ØZ³4À±Z$+ˆW*pLê‘wû ‰IX‘"«I²‚TJ…]—.qÖybÞu‰Õ«MŠ`KƆ½ŽÞ|ж$ˆk~h  üªÈÙ”M5Û\%>.!ø`Çæ]¯Tcâ@#Á•­&U¹®ÌA12X¯`•\a×ùÔc¶)JÖybÞ“"¤þ¤Y‚¨O©DŒ‚>ù”NLâS̘s¹H«O²‚˜¥ÇÄ¡>åP¨æV!ײeÇꓬ •Ra×Ç¥Oœ¥>1¢>±zõIõIÇ7#4}Y O3nAÇ77)+ˆ˜ P¨£U¾\€‡*Sèøf²‚Us…]—.éøffßŒè°æ¬y|_ßw¡e‡‘Pœy~Z‚ÃÙDh2 Û"6E‹…“µÛPÇ”ã”;@sÐ?øK–Úúôƒùg )e[’,Dg-…±dJ%ćhcHµ=Æ1«^!S½¼æ™óáU³7uJ'W=ëPäjÒ:8±ÛLçþB’sñϳ̃rÇ$Æé{Ÿó.4üw×ð¥7)î÷ìkÇc˜+5ìU\V´g´ι‡4\z\œ_—LÒ³Ï/±6÷Üj³5îz¾¢ô&Åýži7T8ëú|8ÑÓQK¶­{ÝB÷€m×éÅbÇ#ÿf°‹jOæw(û"§Eï(¡†ný\i^âµÖÑiÀ9À-ç52%ÑYQd:+ÚüMÙÒØÝ£…x£h¿‚H)ɺ‡Ðsnh;®[NòVšn{´•.=¸¦ý&ç}ø˜M¥hFL60"¥$ëÂGZ%í¹nÙ _8bM‘K®i¿É9Ùà>Wòza Zó.‘¡¢Þas߆>Å Ò븺‚oËöªc/·^F·š¡G›Ê¨±±rŒyœ“$jd/Ush‹HMމõ(›ˆ•&„´SMéX9æ×;Ck³K;d¼Ì:ÌZ‰¶«0I,.2¹ÄwD5¥cbU—BÄ|Ì“I!ù2v?#<‘¸¤Äb#j’"›t®É­m¤~gÒöþüGËoÿ§?dzyÀw=Ü‹qøsÙ¾÷½³ÅÔŠKg2‡óòÆ¿=ü½€!–ZÌø?]{ø²¼‰ãgb²_G+4jwœð–Gé Ò–z0ØïøfÞRß}ûfÍãÓó¿OÏ/œ2ËÁÈm t°-'Öœ2Óåʯ¤+ ÆfOO·KlíuÝÏï‰ÿ ýƒ/É&—Ð.Ä»¼eütúüòbüF9—Ú~¸Ö:¾]Ä#Á·z+8ocõ§§?&æ_–ÿª%sÄ endstream endobj 682 0 obj << /Type /ObjStm /N 100 /First 896 /Length 2633 /Filter /FlateDecode >> stream xÚÕZkoÛÆý®_±ßê ð¾ŸAP ‰ëÜIšç6¯…"16oeQ騽¿þž!%[”,K¢ó* ‹KrvwvæÌÙÙ]úà™d>:¦’ÂÕ0£,®Ù`˜Òx¦î#óÞájY¸&Ãb z‰)© |Ï'É”1h"y¦,ÚóhWyƒ­™ A¡‡ÀT”T‹ – x#ÓÒiô¢˜Vx¤F!´™ÖÚà‰eÚzå™¶„ÓNF u-´^)´C}ÑŽ–ª£Åj¤¶=¥iÔ*1£I9çðÊ£ÅT5ÚP2h‘-™±¤†cœB§TÝ9XF£A—P ¶¼±½ Q=4¨3#F2+ôY­Vx…Ö­vÔ²G:…ù¬5PÿÖ‘>&Â4X¾ <”`€`ÐN²T0(D0H§Ðs°’9íéI`®ÖÙ*æ\H(D悆>Ö1Éxæ’Ò½` ä«Q€g‚ƒáTàrMwžyKÕ¡·wdL É‹±;‚00“Ða@[pžêO¦ÑT=ÑhñS+G-{IOqçQl<Áµ:5°a”äeôIŒ€Àáx´¬Y4ÚI,: ’°§ª€iôÔ<Ü#£ ö ÀPLÔOˆ,iR,*[’ŒaÉ…lx–Œ!J¨b %t`ë”üà*) %°JŠ©Þ@øÇKŒP. ù*‘\P±wï^OãŠÝ»ÇÄ!lŽ/¨ä$?»á€”Ù ø[]J!È.…`¢xy˜»³øOÏÊ .4ór",Îo€¬ËN@Ù4õË/=ñ|Z ޲нcâùÁ!/³‹Š½ïá©ÿòïI†ýã¬'b(Ù¸*Á uõžx‘•ÅÙt•5yÔžfüÿ ¸`ï$qÁ:é÷è¦?E]È©Fîþx\ ©w5-‘.DKt]꺖ë‰Åt˜M›Få{êy•­ñÜTÖ:n 캎)*CæèìCU·ñ$ÿ…–j71ñŸ›Ÿ½“ªšÜâüüœJ~Þ/OòñqUŒy6<'ÅiVŠQÿÅyùW_|*'âYl{õkO‰ÑšKŸµš§¯®Û{G¬_»ûõ›· еÏF£÷7ȧ¹2®-·€±Ùí4Añ»òÄU« ï ÓdW`štg˜6ÊÓdØ\åìêgWµ3|1%qª³&pY †¯­Ë? |µå (ÑÊs sZã¸LöGГ1§lÀøÈ£nŒgBâ ñ]ÔPn”à“³éð,«•”U68:ú&C¶À=æ$O”"xÏ1  Z¬SQ[—"_ø(©±2ÀŽH¶Œð ä.{T¼,ˆbïY1þCZ‰ž ªýÃbzJ÷ÿ~V.³N2›YgIÆ( ÙÓ&9ä™<6³ÓV„Ôâ E:[GHm»5;)WÙ)îÄN‹¶J[Ø=udûõö\LDڹ˺ gÍœÐÙˆnÙˆ´LèfDZ{l2⊌ç)÷-lØ2[Ë:-P®›>¯’¹Åô¯«9•\5gìlδ…9Û2*X¤Iv› d«ä¸mÜu0¼2tg»­ÂPmÃШ·hµ ;È`RªrFYŽõÖ>X$ÇîX‡õ+?uu‡V«îH]Ý¡åfS/É8ÌýJÚr .‘>~©)­mÅ-â ³}ãŠ}µßɾW‰5íž.´yÒ56^ñèç9`]þAhc#·0MAåh/)q£Í·XÒþÔfà¶eŒ†ºþë¬×.ú¾@.eVùט®€4zÈØÚE޵§âGmWÞ_ÂQ;Ïepߎf‹)kIÆc1Ý(§±L¥ È]y´•am•×^è®°µ+´/Û¶¶áOÚn®jvÝÆ:îa--×H/k+@Gí•á9/¦ÇBÑ„¨¼À¿ßwFù½èï$)¥Þ»ÃX%Å%¼jŒç‘ÂM*ž¼ýþºYþlÎ[jkÃuPný€I®CÜ+84ÉúäÓ.¼Š‘Ge¾’N¡vóFÀ²Œóš§åé5rÊ#ÚýêëX k´»Õhw£ÝÍ¢ÝùÙuín÷]t•wAÓB’Sê\oC*Ú†ür( œÝÝ!…JêaªJ\Á™œdCúþª›j’œéW[mÝ>Öªá—fÓ³*»è—uLMÎ>Šªi6)¦U)ªitû2ñÉðcÛE‰ô“ k¸4¤«Bú¿…‚¸n X’10¡„)ÿi¨_Í@ý–¨_ îfW„NP›ë,Øý,ÈýîAnˆùªÏÑ•a¶Ò»…â(ϲlPœN€‰iY ò¬úû2¶”LâåC$ 2rºœ—YN]&ºúàNötˆßAÅ­6ÓlöTt¤=¬î"×XÏêd¹ÓáÚ½ôùñÝOã?£¢Ì†–È¡GÙí”°Ns¼QÑɧi’Ð7Ö^«fòýOãFÛõL“±Õt¼Á”F‡u€éÙqÇö ø-VK2IL2;´X`q#ví~ëÚ@kóuñˆ}aglÍ™|Wž z…g‚ìÊ3³„ÙHßwG‚rŠƒ•³JsH8hfµAdøº/‹Ñçl‹AÝŒÅë§£H¶™Ž‘±nK¿…ÃKTmOsTCí=zþ„=:)ʪLóIÅ×î5ÍúU^ŒúUÆöîb••”^”ÿY꟤ü rO‹á‘–Ó~½¨U¨Ð¿=ÊÔüíƒ~™ÕfÞ¼yñìÕÏ/óÓ¬ÜQœöÇA²FÁbZ²S#µi“ÞB&Ÿ–ÕÓþ”ÙÔOú³›ˆ›Wù°:!@ÓÇAóÿõôqWû‰©7‹(f‹õA?Ú¨3ë«ëe] é×ñ ‚¹ºß—ùüÁ\IwÕ6N{˜Í°ŸõO³õFyP‡3úÝW–EO 4ŽúÇ%‚Ëùh—ƒú&xxµ?ùW–ŸÌn©3z‡Ú=ñ¸êòÁ}šo˜„¢Uvú;hö{š—4Õf¤oíÐLKàÚ÷ÅcñD<ÏÅ‘x#Šq&*d~ø=/î4:棌>ªJ‹çדW\%¯Ø™¼‚¹5ia10ª5’ÓGz:=$î­{ÝÀÅ$/“FìB-:Xü`kóß g.ן`wqâjfwËl­´Å4¿$ã‘[)³Õ™`kÒ^»¹×Ú¶{ýÛ‡ÿ¨­Ç§„cû§Ø‡oß¾~|t3Å&sŽ@±JÅŽÕî&n¿]dâM¬L|ì)y ¯5W¸¹ýwÅÆ©Þ<]þ³x:ïÇ.IèzZ™k×°¾™³½”_ƒ××yâŠ×5ÖÉhú û’ØÉúsVq=«£î:Z7×ÒúëY3Ö/qüñP€á_‰¾ø 2ñ1ÿŒ„»Õœ?“lšC1¥(ó QNúƒ…©@|nO³/ï`¥ÿ•—p› endstream endobj 794 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2469 >> stream xœV{TWŸ23ZJ-i$Mض¶ÝªµX¬Xm¥@­¤¼ß- ï’@H $˜Ü ¯$<$B@ @µPŸØV˱ŠmUZÛj·=•ížs‡^þØÁ³çìþ½gþ™™ïÞï~¿Çù¾ËÀÜÝ0ƒá“#o‰‹Ò V¾_¥|Ôz7j Ñ_K!,Šï&ðpw¬_äO? MÏ@éÌÁØßôJlTüß7mÚ,.,+ÊÉÊ.ñÝöºŸ¿oF™ï"¾!Â✬ß—è©0_\(”„çˆ2$žOÎõfIòÓ‹þ÷ß³ýù1 [ûnPpaHQ±4=Cÿ†ÿö7}_óÛ†aÏc/`/b‘ØF,‹Áâ± ,Û‹ùc°ì9Œƒ­Å¼1ö æ…±1oš%Ì2V1ÊËnynW˜QÌI÷d÷iŸu–µŒWÏ¡ÄÒŸÜAÆ“ò4y.e;L¥þfg,ŵs>6©²o¢êW†£C˪Pô’ª86ÝìhèrìÇÝ6ר:èîwòÑI&¡œßÀ¤Ö¥ ÙgJz2¬±ÒCKòÊ2ªö2Iiu àˆ;”ÆŽÚúV㸑Ë~ ™¦k ÛÖÝ é› $]£rœúçƒ.™¹„QñœJ(aIq­´\%•@aRÔ%µ&ZRÀN æ½­¹‘( òÐz˜ YL~w‰_Ö²Oxa Úž6s&ÿ'ÝI¸ÿ!$áÆ™i顾3Ï&nÿ€ô¤Ž"©”ç%¯oîAÉ‚7»¹‰8P׆U †YúìÒ\W§zÌ>õ3t‡áš÷¼Z“*¸Mhkb¥ÙGbä¼rÂj¬ €0«SËÙˆ«PGhIö|êçœ8ïš¼yfZÅg' ·¤Àà”(× þŠîCÔý!ÆŸ‹ÌckáIð¯“WÎ_»8ôü~*˜>÷þuÄp¡ €D¥ø¥ê?’©T:FQ³œþËØ³å9§ùó±£ÛÂZ±ã­”„‚H•? ªh<á°SvÆ­{̺µPcÃ÷Õ”·è/’PB8Ç>ë­·êÔ|›¢I× È.[kïI©='], NüBèj¢%YÊè2i‹Éjld·µ^« « Ùä©;Tvj{§×Ô¸ó†7 ý+ø%§n`Uàº*ÝQ-ÐuME]‰¥¤®»£âƒ£ï' .äÊZ‹A>/5Oœ°7{x±„_Ž^oÆÍ µ5ôAì„FФï\!SÛs¼Úî3õÂÏŠO~è lVܪè=¼ÑþžÉ™¹~|ZV¥ÚmgP‡©8(pçQ›”µ^]­~5q7B«¶åh °ò@[£yÐDÚP‚‚Ö›Õ“/B4­њ4¦*úјt5Õµz¨æfÛ|Þäö}Uo>a¢ñF¨g¢.PÜ.¯ówá+ßÑx©ð/8r¥J§d‰¦e\ã 0­ëStI\ií€ÜònRXI»¬«Ëaï¨5Ô̽Õ`f²ÇÙ1r¦§ –N -áe•iB‰L™rièaã©—ÇGÓ—ùìæ¸º6Ù¨Ïp4 Ó!´õ.ˆtRU‘²°J ÈlñÀ'‚ZÂxi|®]ñ7íí§®2®ßƒ²™pËÒÛ]M†²°2ù¯ ŠUNÔMÀÈkeº`ù‘/÷;È]„nð¸fÏ×Ã#³eü8÷SŸº¦{»Õ¥¾3¿ã}L"frèÎø;ŽóWX¸ œp1¨Í0€“¼'­ D´¾‚™²aS…„—ñªkê¾"§Èõ‘#$‚”2aNJFaØI"þÜvHüúÍEˆñÑ<ÜÌiœº .ƒ.q³? ás¥Kb§ÐhŽÝëë¨|ìÍÞLE/p¤8{½¤ºB%÷Qy­ÜB²O¶dfZr}ÒAª<· ;¿,ă]ãÑÐ=bîÐôÁn¡õH‘û? ò;pz&òKð(›Õ³ÃÚM-6ŸFÐZÝ®¡3)†G«Nù@òÇ;~3‹¸s‚çgÒÇÁ9òÜØÐ•‰±Ò¬A~^Ëácd7î ûñû=¦c-¬°áa¦ŠÃy’zDT×$”gV„н¡žh46i¢ Jº9& ±JåjÒó¯ ûÒÓv=7_å ¤R|J×V L[¨£gÑ/\Ä…4mG-úZ^¥CÛAWgÃY#ÙŽì¥ÄŒ¡¡r`×É\_4ˆ^¤<4mÕ­ ‘:Zê§jé%úRbJg+Úc—¸6œnE» ÿò.– _€6³2áçíÓÖÏV¼¢tQ?_ò‚_ßÎy³¯Ã-ð.ç"èÔwV^-Ž{É7£CßËÌ]™ü‚6¹YN{\¡”f"¹qëÎñÑÓ‚OG»/€/Átù¤¸_ÚQÚ”ÖN²ïõi÷ÐÙu߇{-1Už—ʼnEÒmÕÜ‘›Ϋ€üb<-4K‘]tX ¢Cï¯ÔA—g©·éa51ÿÎmzPQù°œ³‘ŠLÅÑ—Ë‘¬P8€vìÇ·á®Eí›å 5ð¬ CÔ̤n0á~ê[LÀ[Éh² ?àVš²J­ðG ¤6èèyÚZ½ÅyJsdŒ‰Ìépð2¹éÃÀݲrs‡ˆŸ×%±–R¬T '‹oÝ뙚LL8fÀ-0W:™ôYêxT'ZíxÂ^/å>ÉxkbRQK„«#KƒöNÂZü{Þø$q8õlñ@Â5 ¿B>ä‹V¥Ê4Â0AÜDO ú'Q:ÅùáL0m·Cáï½ûn²ôÚmDZ~ë =é+4U@&ãd2á³pDEEyÝE}ýÇ»Nô>.<áqis˜põZØgÃßòFÃi’ú¨ªAû^g)‰S¶.³«"O°œHèÃäÊ=†'Ü¢:o2àÏ LJ 7pŽÔeFVhR jÇî¶îØ&@{Q$KE­#<•-T\ü¸^}÷©a“‡ÇZ§1ìß¡ÊÜþ endstream endobj 798 0 obj << /Length 2205 /Filter /FlateDecode >> stream xÚ­XÝsܶ×_ÁGÞTá„?ø£î$uœ&V&iû@ñ ky&y²ÕüóÝ@м£|N&ÒÌ‹Ýß~,¡ðÏK#±2KŠÝõ³í]?ÿí‚Eº5®'”/¯/®Þ(•0J,µ,¹¾²ºÞ$ÿJ_mó}ïÚÕZ‘ªg«µ”*ýé஬ïÂì;ׯx–~Ÿ¦ýЭÖ\Z“¥F¬þsýýÅ_¯Çýç_)(RžJª§’2Ɉ¡Y¢3I˜A\J(þŒÒT¶6¾Q­  …JÖœ£ žšÀ\XüÏì«Òçž‚Â26'`’.ÆÍ˜2êñ#®VÄp“¬™ L±%Ñ(LdÇo°ôê5¡ 'ª¹VAM€šHÕTD Òjž¾ªšÎmÀ ‡ª/‹*ïºðŽ– ,?`™+6˜[\tÕ‚×[‡FémSU7¬·4N¹Ïùn_ÅïeéÚfF?øÌÛÿÁâü2ng§ÛqΈâhèùvë7ÂéëU&Ò`‚Éê&<‘â3¸¢Ö2}d<}ßÜÂjVçmäùÿVàï‡õ`÷°ýÌ4ù.° tnq@'ŽÓn@´K½tðáEW ±€+3–(@5*z æ4èã¼HÛº,ò*0úÙíA7äÞÐà‰L&JŸCX|9pêõ„|!Ì™zyùöÕû5§Œ®© rý›ªè•óàË4ᚺmû~ö`ܦW³Ç§OŸÂ€ô…D€ôÃâ²Ôw98n^ ”ðs¨Ë›f|+{ü½:¶eáÚ°ÞeÚ»b[ƒmÔuëö%L{ZÔi\8WsÁr3Š]0`ÇF‘&#Œ«$,3çŒ2P¯'ä F9f:øYúÚíó¶N,²ÈoêÄ;W£W!@B¦ÍmHίšÝþ0&ð÷EéêÂ]š_êðºG¯vmWz„a¹L_6UsWç—aö»Ü}•É42xƒcwÓòö!Ì ªdëã%F™Ìª€ÉðÂl–Ë Õ‰«ïv2yÝ\ü´„ £j€‡•Uß”wŒq_“ˆŒUézÛ:·îËAÙˆ‡k÷mÙ¹ _÷Ðõn¾ïBZٸʣJC®ŸåAß'dþ½Û6>ÓÔᵬ}ƒSE„M„äbæŒkDâõ„z…#–s@áD %Ô¾¯#RŸ“C³¹HŽXs Òó Q?5¼ŸHGcø"ÓoC,j1³¿µP‡Ç,ú÷ÅL Õ’J$yމ4Ku´–kï!QĸÁ”|6Å(Y‡å *¥·<·ŸÉ¶ëñE¤AMÐçeÝÅo[åÊfriE8³ƒ`¿º”‰y™€Ù‚&¯âr’xh=x_؉a2Âè£PÖ·e‚lç2 ÓºnêdÝ•7U\è+*uçj×B¶ÅTy7ÔDNŒs\~õ… +®é*$²72ÍëMômŽ<`𥻲ï1õbÁôß¶hW?j‡¢*]€ÍÃÌe„9î÷$í¾\=-¤ÐÌ+ã®%öC†sQ‚›˜°p͈S7ó¤Ä@Ã&” ¢ã@ ‚Z=Nô>ØaÐõMë»?¼F(>wù&~ó ž~_ã÷õïò7M®GnƒƒOXt‡lÜÒÿº¢Û4ñùØþ„‰¡ªš|3Ójp]ìô\w‰˜46G=ºƒF7؃'LƒÉ¼ ÏVÅo¾ásìAö‡Ê[#ƒª ɱU£¯¾ 42ÑPºDæ{b´‰¡·Ô±^òyC åNˆÐ(KûQIþwmÇŸØ2鄪u®ëÇðû”÷ˆžÃšç[ ÁûÖõ‹y jcGô:Ð0:Ðz‚©€Å7–DÄ}3H ÍêàÄW7},zÁ_±žÅôæg7n<òá"òarI ½~[ÑSqŒªÆidcéu† l²Xd£Ï°‘`nB7 ýÊÅ´RbÊV>©ë¡¢(Èî=òpèëßa‡û„dÊ‹ŠÅDMC Y4a–Qêë¦>ì`®\Œi.! ögädªfIù/‹)„AßõgddKÙt³çOlfÙñn'} È¦} `èÑ¡ÚëPW]wýauð!6ˆ‚eŽ:¡Øß}ÆÒM ]¡pmlfÂdì·öÀ(–NœçÐ}ö}A6=H©¥ÂÝË0Ùœ‘$RÏêÚ7Ê´YâÊi¼"8g˜–þ$ìÕÉ= ¾ƒ=¡ç`P=O†þÚ6‡»-@ã*oL{TiË‹· ʆUl–‡ÞúÀ‚¦oEn 웿J©}û¾ <c6_À3ƒ|¬’ Õ·‹.ǧ÷ ,ˆ8Vj£b€ÉÛ6/¢g˜x<‡Ïãe ‹!(Yú½Éùþ¬JÛqKck¿ÎwÌÂýD×åœéºŒ®&¾˜ÁËL·[Œf >0¹=[`gQ®—öü)íõ\ûè?ŠâËyš%:›\QúDÂâ4ûcp=‡f~#uŠ+—â‹)r*ÁƒHæb>î$ï¦ÉïèkåEŸcò»Ò¨À3ñxL (ê[ûä7mÝfw)"œJ—°ÓTŸÇŽ}M)“ÖΫ‹¿X¶²¶}¶x7MüîφK—ÿÔÍ 0 endstream endobj 802 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/moreno/research/software/octave-queueing/doc/web.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 803 0 R /BBox [0 0 491 398] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 804 0 R >>/Font << /R8 805 0 R>> >> /Length 1625 /Filter /FlateDecode >> stream xœ½XËrG¼ÏWÌjwõ»¯v8áhoÄáE‚~ü½³úY³»´S“ÓUÝ•³ŸV­hÕüÓþ¾Þ/?=ë»ÃB+ÿ|~·8›TÒ´ëÒ~Ý/.k£Ò®Gˆ9)ÇÈÛã q׌9{WXöŠrkÀ¼¢Í*lžu|Ó9sÏ‹•¯ø%þ¿Yüú×RtXŸÿö_žÌþÌ/Ï1,úòR}ÉXD%{ߤâ­ ©D‘µ&Õ&Sƒ&Ñ&1Æ)'x0y4y0y,QTFð `ò4hò `ò8MZ T‡B„4u(î¿'ŽmjD®&O-$lO ÕÏíÏëýúó,1°{»Ô=G«#l?c´²yÝí—OôÓ‹˜½Ç,žhe0ð6ª1pe”& ‚¤rS9<¡§/w¿/¿î–gGe~¦Š’UOdH>)2gËßD¦“L L"¦1É ^¡:eS¤ì"¦2m‚:“ƒZV25@2‰˜Æ$ƒN÷Qc:ݶ2¦1‰ ‡–€µÊ’ç=ˆCc”ª`÷ÇrA\yµA‘ÎiݽÁ¥µç‹^yŸc,I›~‘Ê÷]<¹SоÆó¹à‰E•P_y5É ï¡Lj÷þóÍ—wïo¿Üqh«1½:ñ¯W›Ñ|ªòÃIÇõôŽÚ”ê‘mB„¾|Ìhâ&¢BR®’Õ^Yœ*™´ŠÄˆGõ8nÉ©Ph|-Är“ ly…¨ìªëÅó*˜Šp @5ÈðÁ«£WÉ cº™XÂt3?˜óàtà= *žš j¡Z§|A’ÂöaÄi¤Áð“³Qļθ ¬]-áÔ5%ÆùÀç&–ŠcK‹e·¥°N÷àôÈ.³ž~ê[Þ ù1·¬¢òcþ\íS}¬SŒõ!BpÇòÿòû|¬¿Ûȯ±ã‚ÐßälYÒ™,;0ÝL€I)(ŸDLÄ]Z&À„”p¤Îs]g «Œ h—×ÓRe§JIªìرlTö£ì»ÌÉVÊöʦÊC,ƒ9„X™‡ÎéBO¤+=‘®4#ÚH©îN$K=@»©õ`p”ÊRçe+KÝ£°)ËRw¡Ü®Ö݇ýÕcºàÀ¢:ÛoÊ$BȘQÉ]wÕz#Bq1!‡"6S±ÊÝ!äÀÍ›„C nÍAZ1"ä¨xîÈ­m»;Ì‹êkSwd#ŒzœK•§;ÂÆ¯Ö«[bCP|U·äѨœUƒ2ÌÓ" üô£»a¨!}EY¡™´×Tß+z(_•éY îåFf§Áˆ,…1ŠVf2V4²Àï„¥a,3[GLÇ —Y(ŠKìYÈp瑤OKÓ”9÷,$íÖHKœŒm1= ç¶%a‰ÌwŽö,1ñ7+”¥Ô;.Ë÷>,ß³?”f—6JSÒµ‡Ò¥Æ0ÖÂ2Odû@†Ìé23’å‹?HE)3&ƒ•lŠÝ`%›W¿²¦R£ØñêQßNF±[÷õ‹ÒVì4!þ!Æ»'ÞˆÂ5Äï§L3 qG×Ïç4C|ü˜7Ä“ºbÉý`]1O~Jœ4ôÅÈúêã›õsowh럇3M¦HûlùØg­¦ endstream endobj 807 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2467 >> stream xœUiP×îf˜îAŒÓi@fæZDEQ–¨€,²/@0왉—(Æ… úbb@4²‰¸DA#JŠ5$ŠaD@yŽ„D£y9=uÇz¯“J½¿¯ª««owßs¿ï;ç|‡$ ’$üS³ Ró3“õ+[Þ‚ä- xKÂJí>m¡˜Û˜@Æ"dlXkiT&ogÁ¶™ð!"ÉÅ+vØDG¬™oggïS˜›™ž‘/wr\è"O*”ÿùE—™®”Ï R³²s©ÊüLEÒÆW˜ã†çøøý¨“SÑÊžš/ËþÙ í§·íù¸¤1éÛ6ÉMgùnŒžŸ¤gö,»gÊnâ fóÕn¸f[䑾.‰_ß’ò´›Î†vé‰üMÊú ¢Öã­·™zŠÓâpn6ÄóÕâw(l£óÄrÞSx„ ]µxúÞqlVCňˆ?ÝÊíØ»íBŒò£ÊzÜ 5~m˜ó Ù˜’.ÍËٮػ†¥|î„ 1?]ÈŽ‘m¤KÒ ·úíÀF› w¯ß²!+ù1ö½¡ÿîí¨½Ú%ý4º>ÿ*ú}QÖp€ÁóÀCÙÅE¹ù™YIÅ"&0õTǵƆ‰ Ù£ò#û*˜¿A·@>ð©¶G` Dˆí)ðÆq0®OR`ñ`ŠãÅS”° +‡µoV‘¼™ 0ž«³Çoñöb' |uµëݶ¤nÉ@æ[ж²ÂýÌ2úÈŽ#»kÐqtâóšÃõG+k7í‰Ùt­FUñÁ*ðª’Ô«¡]èËV¾X«àÜp•ÑÙà+”‡¥&±;öÃ$XÝi;ÞÓ"c7¯ qŸÈM\÷ÀûžîîìòLÀäÆƒI§[üûÀeäÂV }reóùÌ1÷öùBÌyï`^Ž—OX ôU-[Lå¯\›îV£„ºìKžÜy²¤)ëãLuÝEÌî€wdBX¬ì‡YúZZì¬Îš²–¼ û4;u+1¾!À³ÎØ{8W¯jY-;ß–{ÝB- —z™ËSÖXû¤5tKQŸÙ†…Ñ÷ÇÎ4ÝZÙƒ`&#„ ¤Ù,œÌ·-Çæ˜}o¹‹kÌ=ààͶŸÆd¹™ Ù?"˜™¨_Pì¥bD°2½‘5Ôo®’ÖÌEiÌ+Cº6wyBþªX)œ¤#BUpyö“ o8%‚øƒÔHSòBYI Jøl]…ÂĵTFÝÎú½S%`¼©ÑãÌð…¯ZÑ(ÏÛxŽ?z©ÐP¼ÜöÃFº,®ýðXAÅè}Æe]ŠÐ‡¹Ó¥õôwI福Y Ø *¹éªG(ö™Va¸Øj”2Ñ:¦øLEökxR#â5|9‡ÚöúèLòè¢Kx¦*›%ØÌéräϹ2ˆÓä]HCæ(¥ 9k£² ~{rG«f4çœÞv¶´E°‰RÿŠu'’ÛVŽf€©ÑU—[ÏŸê20Ùks¯j5s®[߀:™žÖ_€éYcW*”  *-=LÂ!þÐZpP<¬»½v¾´ÐPÓT´¾Udߨ챿Tè±üÏTÉÑ_¦ìÙ¿Ë0ÍþðÓµ}7ϦúKñKý ýòFcJ€~É¿M?‰nŸï›X+ÍêL¬óC ëè‹ÖnXÄ ÐÓY&¡|\å‚(ºòqmz8…EnÆ–…Ì*ý¥c|§PÞK&Dü>5§{ú¼ûô9uÇÓN³_¯};€¡î¼ÎÄó‰çÖ|é"ÁãsS?NØ+Œ4j_ë§'Êëj/}s¼1CÝážáĥˢ±Í¢÷ýб“9ŸEMc‡û$ 0†À›ÃÞãàýû}+>3Æ÷tqâ4´ßçp.¹pgÚàT VƒšäÝX9ÚNg@­ÖÍ? .´ž9Ò‰˜É®@«¹aÁv^kÏÈœ©òðƒÙվ޾“5$x»õÓ` ò?c˘䭊$YÄŠá õ*t¯ âTäÅI8'ßÅŸæŠÀèÝ~L O䛚˜à³ÉaS„MŽx]\u.ìf–`œ`1õ þæ Ÿ`Ö7jÃêTY)øuþú ÝD“ù2œsçv„Ú9†,]|ûñD÷Mµ0ëN½:òü©$MP"ÜLÙ)Þ‚ŸÅ ´Ô6¢>(—û‚_ÎröÀ╵wã¥ìó¥IÉaîoa³)áXù/Ál(¹kÉ);…8ÂÝ»’àí›°|Y\Kÿ•–{2ö9¾n8Þ¾Ø%,ÂÑ5´kt¬ëº~ØžB/Hõ D¾à¬­_P¯¦Çcþ4Mˆ A›Î PEZlüª|;„ßbðž!Ì=Ø ^±äŸ¬í•¦µ…ðGŒ§áäe[üNŠ·›¿`íSˆƒ¸ËS“2“üZ¾º"Ê×¢i^Wí369h<ƒ þ ÈV0b endstream endobj 810 0 obj << /Length 1577 /Filter /FlateDecode >> stream xÚµXÛnÜ6}÷Wè‹¶õ2¼‰¤bä¡E/@ºÍÚ1¶Hü ¬e[èîÊ–´nš¯ïCiE-}I€ pHQÔÌ9ä™ápYBáKršh!H.M²ÚQ7ÚÜ$ØYüvÄü¼9Lœfþt~ôê×,K%9ÍYr~=6u~•¼Oµœ]žÿž“£s°âFïw宬¶7öÝÑ/烃Œó"±3¡¨1Æ 1‰2’0!Ñïé >ÌÒ7Ø0JOfs® ûŽtuW¬±{WßíÖEWÕ[|n«Ï¥£KÀaZüXv ¬RÂN°ç^7Åjo§¾Ævµ.ÚÖãÀ¦)ï[¸`èã,°ÿžqÿ™Ä– ßRloEãðÇ]D(çáǽѼ7Ò·ÞÉ剳4L¡¥‹f½-Û4£vÝl{ÿ1ûw£«’¼®>Ù¯Üò~j¿Ã§óÃ7—Q“ïßá lÞb³¼ üÜoW›ÍCa „c<óíÅwªrëÈ€Úæ¹"Rx©Ÿß–~n CΈbPþÔ!¼s…è0æQFd6¹Þm½¢8|]mgܤ3®ÓFtº*ú—2ݵe‹Ó:€ç:;s7c麫¬ gs–ú9\ÌcéøT¬oê¦ên7Þ@íªÞØOæ(&4ÑMÝí:ð%8OaW[Ù̽ÜíØ®«ÖÕg‡±E² ¤1YžE²ïp£‰"¹¶‹}h"e>‰ g­Nþ‰/1Ü$£‰v©¹„`k€ðX»jSFéœdJ÷x<†p#^Œ'àÙ”ÅÖöDz;cÓ#>­ËíMw_' ™Mò×Û(.Åå‹pA8K1ÆUl¯ü²Ü6õîæÖo·P9QÊÛûÈóaÝ–|9¡Â >ý4¾ ôëæ'Ýl.!HËbeåkŸdÚ–ÍCµ*ñÕªt‘Ñ•M|ùàHÊxQ·ŠP>vJJÞTÖ*ØvN tìÅ´?3ì ‹ÉrÕÕ€e0‘CÕp&ö¢ôõøôô@P2ȵËxâô¢ ë­œE˜#‚NâÙiAR TµU‡ÝÆòŒúÑšä\õn.bn af.™ÍU¦Ó³jë(€íÝÛ>¬oãÇë.Ù {ò0zUnl\TM¯??"Gþ¢pÉ òô8\ÞÄ31TN<ð¨`GIdSµNÇEÔÊ_—‡$DûÇßßጉi$ɦ*ñG[Ì„LÅýB¡³«{. Maÿî SÙ?ùÝšy)»qLGÐñ´]” M :·šÑé`ÄÏp"yÊ, ±Ÿ›[c†óXÇ Î›á½¼¬KÃ{LÐY¯±3€ã}|¸þà…»CThǤùÒž£ ÿLÑôOLÍ`«?1õÈQû_Û•o ó²K¾Ã¬H4=éìIîꃕ;vÜaßÖØûˆg6>ÀaoOó«×ÑÒÆØA ´ kᥭsØ1Û×o¯ö¥ÕþŸ?¬‹÷D}`È@Z£ínq’3/åQ^”í&sJ¸Èð2@Å;¥Rr–£XÍóp=—ü"Œ"†"ÿ†åÞž"”“Ü<Áp2ô¼~ð`O™=›^“ß|«–‡Èp±šúBñÉa™™Cuœ+¨ë­6 É@›pñ‡0p“ÿŠ£`.A@©XpË k[¨Ëyá’ñ`£å“lñh•0,F¼ŽÖ„+)£å¤Š–_ç,\Ñg¤ÿÁóÀû- endstream endobj 813 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/moreno/research/software/octave-queueing/doc/power.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 814 0 R /BBox [0 0 501 399] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 815 0 R >>/Font << /R8 816 0 R>> >> /Length 1061 /Filter /FlateDecode >> stream xœ­VMo7 ½Ï¯Ðq}XU¤¾¯)Š=5ñÞ‚ ÇNRxã$ë í¿ï£4šá~ÔuÂ;¤¨'ññ‘³_³dœüÌŸ·ûé§7Ù|8LdäçÛ‡)úb‹#Ã5ZªÕì§èÛ²8–_(Á¼?X¶Ìgño %9þþÞOÑü˜Ú¥Ì›__rüõ1àéi×—0Žopýo7~ÃW["_¼È0s&ëc ¡àÉ&…3;4Ìpu”a)ölP ³Cƒ W–ñLÙ²™d¸:ȰH r ¢™ ;úöþ¬6ÿ#ëšRUˆ5@t©@©_'êÏóÇíÞ¼ÚAÏE»û©KœL$¨‚TŠÙí§·wµÍ5FëâÆY†}¶5ÃÍ(ÖŒ¤Òö[Ó†®Þí~›~ÙM¯O•|.šâm8ï) ¡Æb‰/*¼^QÄP}mì^çÖͳ­ö/B‡ŒLhJ*‘në=~6ûOöôÈl…ˆl ú¦ªhÚJ„ßÜ}“¨¹mœ êw4;yXÌ rÙœ?àQKïvÎãAæ%¡q8Ή~)¸h½ŒÇŒî•úS¢hª|²äÅS86jæÄÃÎG£H–º3ËÄÈÉÙ, $Y2pä,Ü8áP‚–mí½ ôû¦åóÿ£Œ5TÜäüAU\h—\«€BárYU¡ôRÖU ‡ËµÎU ëÌð\"\»%0ª@ †ª€œ0¥³®‚´yðº #ÀU¡&¶I—¯¹*Ä®eà@?Q•Á¬­A•¡«¢è2”œú ×2Tgk\ËP"ú+ÏUL{ç\¨æüAë*tšµÞreÒz' ÍŽôžª°©ôS²í];˜ö± Šh8Ê,å™èîÑD+ÏLôºkÝ€›NÑð —³"ÚGŒJOŠhö6D#-ß“DsÁ gE4ôÑJ4“(ê¿ oGE&J¯©W˜çÝÕ¡yyvðê¸þëðt·×ß .·ççæGméW¶r8ê,¥ç¸xþŸÎEI‹Iƒ’0u|ÌK¤é©}9RPÞ‡`)a½”}B¶I²•/¿Ë+ÃÜ̹ÿþù¶½jïÍÓÇ» /ŸÆüëéo²”b endstream endobj 818 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2516 >> stream xœUiTW®²éªŠAT*%àÒÝ5ˆ­¨¢ì Ê&VÈèQˆÁ¨ÈCxDŒAY\pI‰ APƒšq -¤ˆH¢£ÉÜâ¼öÌ< ™9ówΩS罪º·¾ï{÷~—¦ô&Q4MOöŒMΈMOŒ‰ÛYˆ³hqö$q¶aõèÑL©8GŸBú¤¯W>{ò]C¸=r¦Bä4JBÓöιæAëXZZ¹lJÉLMŒOHWØÙ.R*¢3¾Q¸Æ¦%Æ«óÉ"#6ySŠ*V¾6Q½%M¥Nûoàÿ—Š¢¨wÕ›\RRÓÒ·lÚ–ç—˜¬Zd·X¹d©Â~ÙBk[Šò¥ü¨¹”?H­£‚¨`êCÊ™ ¡B)WÊò Q^”7¥¤ÖPk)CŠ§Þ¡jeDÑ”1eBPS©é”)‘‹Ò#û¨´½‡þÇ$‹I‰“Š%Ö’’ Ð[«—§×*"µ“ÖIÛkÆ—©f-Ùp¶†{³à‚¹Ü0‡ßòƒób#*$”vt:õÂ#þ«±TЕö–oùgSG_ë•þW¨`µÞMóe¼­# QE8sý,‰Oï­:éJ-4j%pJ¬°ùbSìŠÝúÍ`˜ü+Á{É+l%/pž59áxš¿“u@'ðÀßƥw‹#Ýôµ!ɨ…ˆ5(m4X‰ ÷“ƒ|½\âÍžŒ°~ÕÜ6×Ûþ÷S†¸£ÏË ˆ³dv…ä$nW«|×$:"ϳ¼ÁW ,˜6ßÊRŸ“ŸI=¦:²Žƒª-4„êÍ1ª×µF|ËM¬zá4STŸÖ†8˜Ý48€ë˜„årÞÖ$m\Ã=fy+'†o,áéx:~{í [»€.˜ Sow È  è¸­dO‰a;InÄßmÿSÄSlÞh6{Âò¶û³wäÌ BÑIaŽï7LÌ›P°N ¹Z‰è-ù¯<¾ÃSƒ÷},–_ÙÓTrͶï²Ë3PœIHèÇΑ±GË2d;Ží>¶§Š[ÌÄSÚüaÁoÜÛòR³áªÙ)¹Ã /Õe¨Ê¤þê¹¶*ÕëöË à|úÑ¢~Ò#Cߘ» ÏuõøQ§`‚*Õ-eÇ÷ÿ­BÖÁ~š·3? qñ9…UrÀ}ã§ü dŒŸaKìYùȈß&fÌK—á–¯Uº)½¢¾ù^&²Ët欲%ð2ÞµÕŸ©oçœYr¾ãâÐâõ`-–J2f:«¹¢•tóžÎJA6 XéJ¥Ï˜—¢Í:éøEÛNúŠŽöHÄ õBî¾½hâÔŸ;-‡»ìGœÖnÙ/KKÉQí[Ïõ2‡þ~é¬q?]Þ"ßÂæÇgîðÈÅ“·gîMÚ±vsròà¬Z}ÿhm,¿Ù,û<ètúMtÙ_qˆÃóÁC@›ve¥¦'&GŠ8ïØó·*+ÊŠŠV%å“7Aj᤮ð9¡ q6„©.¸¯Á%ÒaL Œp„t„!QXÝ=úánLÇótVx&ákÇ€›®‡ H®ù ±¯Â«MÁô{Ú€)%¹ÒÝÃã=Q0Š<¹©fë¹ÏÎåßàö· ‡Fš¿ïEÜ“f¯…¤Î}HÚYè~R_G]e7sñÄñêCPþ Y;»íàÎRVNVÊíÜ<:tá=b¸–”‡ *+Ýp¸›þeF$à÷Èdn£Úâê‹5ßœ¨C?p0gE'ž+Ã7ߨ†q–†`v 1ÌÁ!8ÌNþ—‘S ÝÑC|LÒ1ªÞ¨zˆ‹yXÅé]ÛKd'3 SQ7áeý>·æ­ŠL_*ƒs¬¤Žï‹ß [{— Â`™®´‡á_ŽªôìM{‚”ÕK Ý1$ÒCqH,PCÞŸ|Ó»´O%ò)Í—cc»ºÀç©rð J»‡LÐÆŒ˜ä-ꌈ?䀂O$\I¹ðéÅ‚ZÒºžG7œipïM Ò¢Kê*ë«Ï· ïÑ``«ù¼ºÞxñɤ ÔÄ=l©ÿ¸–õ–²q°£n%t[¯¬Oû7ª1tÿÇËSÆ.#þâ_vÞÍò?ütënÛ½‹±ž2üfìÁØönåF¯±­8‡}tc[T†_¨,¹)ê¤âx[7¾yƒ÷˜†¢~ Úº¢þÑx6K¶ndz3¹Õcô‰M¤¨–JÄZA÷søÎ…KÚÆMƿݺþ  ;iMQÕQ—Ö÷D‹'qÖÔØ‘ûÈ aÔ~¶èdyÍ·g×uÇßÑÿãŸx¹M6_ú‘Ç.lg"&3Þßi(ÊÝøvØ }¦Šy~=Ri»n­Exý»åÄý c‹“ªÜÚFˆ+ÎÖsž&4,='矴žùªáÁL˜¶âž…Í>pÀ ódýLAÍÁSGÊJ.ל¼…8M]¸ã‡™É³äi9I{׿sãäÁæ1 ]„¸Ø¥\~l*&z³ø‘.LjÍÂÇNe îû—´°ÑÒ¢Ñ#e4DÐMb‚u3¤?3—ë¿.nBÜp³·é<¿5–NáÕ]t‘á¦ÒÍßÝOî" Í^¼ PX?dzCbv¨¢å*…k"@«Â4ôÕa¸D’ï/Y0ùƒL!Gäåéºm1ÂF;]]}Éï^2ñE˜5òÞ“EÏ0ï¶nsp¬¼<š~{‰î¡«1_¸qd¬9O}-m}½V,_ÓþtðÎ=íXcO4×o„Jñ µRäìˆw»có`œÍ=cªaë¬%$NŒY¨~YêAïAÈ'7#~Dœ%NÖ–W¢6åcbÓ¿¥îå "dü«Ñ1~3±ñˆ ¨øõ)wÅ4/¿,ãG0Å£k‘.¡‘«V†Õvt\«}$ç_áÛzýwüí•~¶K|›{ûšoÏaøì>ý-äJ  Zœë¹Ì˜7½¦µ¯%øZ03{ÍLŒ—§DÀA¨”@Åh¼à…|Uq¡«Ó-žÉá¼.,€Xtƒ¹ Øò,¼U×àwÖqŽzÃuøCa¹À:ü„AXÝ顆 ½\,=EI_0?Oz[s@_¿§P Eýl L× endstream endobj 821 0 obj << /Length 1005 /Filter /FlateDecode >> stream xÚUIoã6¾ûW=Q@Åp§4À\º¤h&0ÐM²ÌXBeIÕ2Iþ}ß#)/©1 X|ùö?àu‚… 9³+î{Œ‘纩ÐXlíXS¦ —uôÆ/PeªÆuˆŸÛ×àõE€`8™úå e8)‚^ƒZæ2%)×|aJÌ:%¸¾@!sZè'Ð|#…j$¨ >AÊa}8/ÍÒ„¤Ûmã‚)àüF9× »YzSP ÕõO·\’À†+@†(a¨Vú ù6ÅmKÐcÌð²Ð8ZÃSãé. •tcVµå„œeÙ™à}¬Öý8ÍQ¹¾-Õk¸¸Œ¸&°ðÒýRÅÇ…]—sµOtÕÇÜuhåüt¯ßøÀ+dlxµàÆGÿ€a¬ endstream endobj 828 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/home/moreno/research/software/octave-queueing/doc/qn_closed_multi_cs.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 829 0 R /BBox [0 0 201 148] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 830 0 R >>/Font << /R8 831 0 R>> >> /Length 1272 /Filter /FlateDecode >> stream xœ•XM7½ûWøDZ¯¿?®A!Š„Ø”C”(š{ÈßÏkÛe×ôL÷$â°øÙUõêÙ®rÏ7©•‘zù×ÿŸÄýC’_ž…WÉzä?¢ÎˇŸ… %ªl¥N™åÓD´VÁi‚JGé|Q)%i|vʇ1> ã­VÙÍ.éÅbx q‹Ž`á$y)6‹ƒÆ°è,ÆŠÎrxXåq_Å£XFZ{™`Cv„D(œŒUÐDFç”m)D(Ô‡GasÂúL€u±-ïæ4¦0èHÖ¥tûJ5 4> b@1ìÖ)´Ä(]£„LlÛJLÊû¹mÅÀ.ç!)ç¶}S†‡>¦sÛŒ.&cÛŒñÕ7Å ñܶ±bðîVy´ì¾ÕóiµÑ‹K-¿&( v¹žÓœqÜÜ@N1:¨X²ÚCr,*àÔêU:[3<¿ý ÿfª·¥•„V63ãGñþ*ÙÍ ƒÈnÞw©Çò&dæ\V8&Ìù.Ò)STö™¯žWyÓÒ™÷4æys²›A‘ëy㞘”½òz‘ÐzèTÌ@NÉÖ*SÊâ¼[í!#8Xi§œlÍôLy¯²dû½Ük°´(Ÿ" Î%2Ìš@HUë2ÅMj“þuµŒqBÆd”¶Ux‹òáý@NI:/{yF{²øS,_2Ýv©~—.©T¼üÜ>±2Û,AôQߘ¯ªÁ%ñ͘ƒÖu ,jšO P³n•K8z†€ÓPzlj’t›=Ä¡.;ÔÍ„=I¯!Ç×%X'<%`®¨ä¤Šr™Ê&‡ÁsW‡.¥S< ”‹\‚]¤±U>¶f8þ¿¢0Wãù@…¥²Åaò¼*JA+Š&±{‡îW‘Bæ½#«=Äh Ëïï:ÖÐevù¶t!a!„Y‰kd·‚Ü*]Ö•úæ³JÈldµ‡ô­`Ýmk–ÔU–3of<žgMõ ýͰ7šj_ÆúTÏ›5UBfÃ$«=¤Sbýnë?(ÁŒé|Þf¯Ðß {£ÍPRf©±t «š˜‘lv‘lÁW¬óH›‚ž±Ý¹<âE\߉x£Föe£°PÆ£”Àê_·ÙG!VŸÎ#Ý’€ §«Š¸&¾ñFE¤WÆìÂô´š}~<¿Æã€ž/›=gX+_Ú”`µçScQ7å¯ dÆ›ŸkgŽËt7™î?:Jýøô£Þ< \Wœ5ïøÃža£ËW&'^ßÖñ¶ô[òÀåŸ]¶Ì©wVc/óÙá0xîJCGK3ãÄÆ¥ Ãm€8Ís¾6tY~.€+²„0ã.Åùíºä¿v0{ì?¬|ÿILûÿs|’?ÄýC–Ë+<yøS´ßgÐúp·–7>‘3>ñOâ¥{uøKÜ-/_‡ãg³r•þðI¼4ËÌùDª¶šà ¶îÎxe’mSʱ9X-átiSi™B›É…âðˆ}õŸixž$7F9—[hª›°\ÜT«m›±/§"ïø”iFNå°\`£UðÖëÓÇçgÙBŸÊÅU ^XP2Ð7'TàjôîCS ( Ñî¸6¿ÜÿºÌib-V ZÞÅ€W’oÙ¿{¬¾P%„w;¬›Ù›×oêyzÛ¡â§ŽÇ{ñ/ðÖU endstream endobj 833 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1872 >> stream xœT{PSW¿—{O-K-Ù()˜0U×VK׊vñA©V@ÊC*j ~4)ÌiØç@º a˜%Þ~5í9tðhãø¨êd¿°+µNÖøp¦¯C š@•6üç%‰rùH£ µ¾jj—0‘œ0^0™:Œ¹è-Ô¹m •8ƒÖsW:²‰]ÍéÒý`åÒ°#_ë§Ùèb#ég¢j 3¥£äcÃ9ªæ}Hßœg¡ßkq¹víšZËB÷Ñ=~ ZÇÕºBÝ™bX óKµåŠ Ey&¾¡‘ûúN<9*šHéΪτi‚¸TYT€Ä¶¤æ2[Ï檲ÒxQÕ°FßR xCÅím%·¯ïLLd^<Ü#b°Ïeõ+l t¶_Hñn:£EhYv°àˆ\â4¬A#Ä®RªV? è²ô«³5 &ÐÈŒd“OtÕùÆ=`%„4øåi}ΰBòÇC'hW«ËÍôÖ#–|—¯¦òtEµvŠ$á¨î¼Æªì‰o ÀsoL ¢1Ëjm²4—Ê f‘¾ÒPÍ ½«¹ÿj{z„0˜d<ƒs âÅÊ,*¦°líq·ìM£·„¼³GʲÜ.Á¦šn¼øPªÓªòäTF¡ ‰ìÒeQiœ´ÛÐ+Ày9‘ê¡ÿ݃_B½ôby'Ÿ cÜ™õL¬g—×PÑDàÓ“ßA€¢‘;¡ØŸÓÃ?~éÓ³‚$Ça8œÓ“z#¦Ó2¯Â¼Ud\-W($’Øœ#ð8ŒmHêŒNù"\êøqð è»|µy þ‘¤¦~4Ò‹?_B¹çœ[^ËŸ-¬,0îû= E~E¿Ä—UÜ0 ÐGd›¾ÞÐçáõªËÖÉ®ž[ð.¤lçOØ·wxBÀÔ(ØŸßn6·#·ÛÇ6l‰fÈ,ÊXª²€TÒB3É—‹ˆúe-ï:Œ%¬"xîÊmžÚ-ªËÔ€w±61±"Å-Æ©SÒ%i9 0þ͆C¦OŽžhWž.WA98}|ŸwÐrŽ*ˆ Œ„ÛLð5µunÕ°¾¤±ˆí¤± ö¹!ðÝü¯Ã?g\§EoŽ'Øáì½=4˜Ô-ìL­=u.„ý%/ý°Ó´ÿu ½°sØ ¸™Ïh²‰‡ºº¬Ò €i!á‡Åbµ4ãè¡´=ÐÆX3®ätõÂ;ÍÆ™ªªoÌl{²Éùâª|ã^À|A2{íB»þU÷ý>¡u°r>¨–,ýWuí£JàŒ:¡ÿé[NÓ¤­#MÚ*ÃM@ÿ@–”Få&jýÕ‚Ü¿“ÕÆc]UÔ1ÑÊ)ÒAQA%¬gØð|?é‚Ì‹§×ò¾DžhÿlÑ·ÜQØÂ`Øvh¯,ËlM¦7¨Íj6ôJ%¹¬œš›oøTte uÞƒ£¹Ã²NUsvM|#à=¹¥µ÷ÆÇÞŽS§& ¥2\u¸®Äµv¨ëwíñ‡’4ù)‘”-}˜ùÛ;zéñyÑStþ†¢ˆzh2š*lO] Ìš¬‚b%0b‚Á™|ƒ ^P\¦¯èê+:=(Ddâh0ܶÞ㛕kn– S­ÊJ2*O.Μ[˜n¿vM44Ô4çàtöpÌHœ=´…YÕÄŠgbÁ -ôÌ,N¿ôj… B˜Mõ…÷ÏÞ4 ”`bVžq¿ dùM.{]‹8øâpÐëÏùR¹<5½U~¾³Íz¡óT›TÄzAY–…ì¤égCy€`r^pï,;€V³ÇÉ‹´j :_Gì†êjç€þ‘,,elåRd_Õ\ AS¥&U´MêÕ”Ÿá¥6pŽn™ÅÑ÷‹Z†ÖñO—'~¬-:f0…òEþOŸõÍÁ¯Ï߸>ÛDLó17~ƒt¦jé#U(¶–°­ZxÕfrrš/sú†ýØžÌ endstream endobj 836 0 obj << /Length 593 /Filter /FlateDecode >> stream xÚ”KÛ Çïþ±TÞà»mªVÚªÝDêaµ+qkýHb[»ýö n’È’áÏð†! C)EF’J‹UDë~|çékÄ‚.ar¤ü4&S¥£$¥)CóÕ±«ù=c£ã—ùw$lJ¬IÁË`ÝõyŸõÚÍE_æÿ6Pœ_'ÙE”f•Þ6‘jøIK¤Qnéä[¥Ñç&úu€wÎoÐ3*aV"¡±šyØi±î÷yœ!°"úcœH©ðìOÛå•·þŒ¹Åû½ÅÜà|ïÍYZ×H¼êëEW4µ76+ßv›ÜOoãÖ6۾̪ªxwg4™˜ @gÂÖQ|õÌå…giþ£€Š£©¾“"ˆoPœº(ȸï.b„©¹ñNÇK-ø€¢#ÒP—Œ¯KWÊ¥Dp{1ÌP}N5Ì<6P=,^楇7½‡Q$ñìøýŒÜêçbä endstream endobj 841 0 obj << /Length 1265 /Filter /FlateDecode >> stream xÚ•Wßoã6 ~ï_‘LjUQ?í{Y±n»n½6èúà$¾‹‹Ä¾%ÞÝ_?R”¸qÛ A+J¢Èï£H*‘ÄŒ29òZ‹Ì¤£ÅæL†Õí· 7¿AÔKP19Ðüevv~eí¤Èd£Ùב$¶Z³åè~ìýäaöáì×YgÉ*u¢KÒ|Ç'Hƒ»fäR#@ö9[“DƒïžwM±!Ùuµ+w“ÆÍÆ;V¨¿òج¶EÁzËâG¹(â~^-£ÂD¥ã'úWóÂc=v×ùnWݘ$F§{÷—×w,TxHy4ÍÓ²µÎ®o#Úbûƒ<Û)Ål”sK@ °LíiU®Éбˆ9¦Ãæ6\îRt·cÍu>þ‹u±ä•?Îÿd!ßF#WdäòêVðú%±bXaSä/N QDQn¢…¼y‹éãJ-I¢u~åôá °Bj¼ðÀï'Vé_²Fh5$\pt ¤B:ˆáÞ]DÜÚ ¶Å {ܺÃË7ŽŒ·7®ÜúÜJJ„åþpKùa!æÚo¡†”€Dh¶ƒÖ](/«àAæx{:<˜Æp`Ês|¥Êë~|ɧÍqNÊjY|Ð ”*J¡Ib1ŽoËM¹Î·ëç N¦T˜¨+¬¼‚ ´éD¦:î4aî$w¸ÓTóÐâäŽ4x—{w3>‚þPϣݲ:àÉ"pX´Î0°Ð«Êu‘w®^ £ò1›”‹Ù¤\ì%(<Öd”ÚlUœ­8<•¤ }ßÖó|^®ËPÞÏ|`8µÎe'ÓÅBcµ°è<´AåŽðøcfm(ÿ³%¥Sá²l¸8n›J¤‹ ÇtÍ+· d§'¶¢²ó†ÊŽ›]oÀ²ÓÂiÕžû4d™è¸®ª~ÆÔÌ å$‘yÄìÆRGzATV±;¶¾ËªlÊ|½ŽQâ_ä wg,‚šÇ.^f "ÆUâ i?®¿×Ýë¢îI´K±€ríÞ\h((íÊ*tZÅë`Ìeõ—ʸ`vN–ÁtS4u“¯Y3t6ôέaË!ÉP7¦¯x,ò.Rˆ(PÄXö mɱ ›¦Þа°-6y°†]†ú&çftÁÛ«º{"‹Þˆ=ßtÈè ÜP7À•Žˆ¹âzYh„UñS7bü—üRc)ohP<~ì­ê‹â·=•{Ì–„ôQ­ Á¹¢°ñ}êeŠöø ñY:vÝóþo±­wI+/§§ø‡"ô1·ÇH ¦ôQ¤Ô³"|Ä{ ¥µÔK-5…c-ŠY8¢Â‘÷úÐ0k ¸·/µ`Ƚz‹¾< ªA>o†S¿eOŸb¯ío½”Ò<ʇAß÷w¼}ÃÃg¾<ôlü]-6›9!ù4å¥ÛéÄžkz=ý(‘c?{µ~-%øÛ‡bÒB§‘Á]ëƒⳬœÐRŇ]€r2Æb=R|jº™² ÒÀH¡ztz •ÞÛà=þ~>àòæULÐZ—`œÕæ5˜t?Å'Ⱥ¡;À“_YwÂÉdÈóç•ßÚúþ{âÀËÁp™<+¤{vɾ®/ï… “ÃÉQ(rœŠT¡9ž(Ñ] í’£‹Ù0&ª‚H3ÐqBJ|…ô³ô?Øv1 endstream endobj 845 0 obj << /Length 49 /Filter /FlateDecode >> stream xÚ3T0BCKscc=K …ä\.°hQº„äÎeUgbl¤±*OS endstream endobj 859 0 obj << /Length 3169 /Filter /FlateDecode >> stream xÚ¥Y[oÛÈ~ϯúÒ1ÒœûLúd;¶×Ù(›®Ý-ÙbAKc›5EjI*±“E{Ï™J”L[A âÌðÌý|ß¹N2øÑ‰Í&šóÔ 3™-^e¾µ¹„ÂÏç¯h”K@0H_½:<“rB³Ôf–N®n&’Ò‹½ÔÕ|ò‰h{ð¯«w¯N¯Ö#IƾsJ”|2§VªSF¥À9aUʈ”r¦S‰TŒü|Pân\㪙kq»‹…ÝpšJEC¿OG÷Æü ºYjÉE^$\Ir–âSx[”óâëë8”E¹N­±0¤jêBoE~90‚äåÊÅAª¼|l‹6Ôn(©›P>.냄2;€¿û¢º Í_¹•‹5I>¸î€iòeêæ~tWLe©²´_Êk詹8==Eiز€+2“„ò”ʸõ«ÃI“Wm>늺òËÓ¤ö{0ä²¾épF?mÞ¸ÐzZÝ•s ,ÎÏ¡Èg¿¬ÎK M¨ðÍšT°Kßf‹’ù²)Ê0 µÆDÁå2vÔ|̤~ÁÙöRßþt±«MTÓÔZ1QL¥LÓ=ÕK'ñMÞÔOï)Íì!g©PŠÃ²9'¿e2‹¡†#€N±V‰»®[¾9<œ?¤óºHëæöpw°‘»¤ÆÀ"L?ÌDw7/d×É¿só½ôžÍ#¤2™jØP€ÆqÞh Ð`” ò+\³ ²ˆ°¼ëƒ"£©±ë¸¬.t<}è\ÕEÃzW‡çtUvŬÌÛØ¾Q~¬í(h\j Ú¦œÚ!2A–°Þ&b 6"8#¢»‹Ø`bg×ÜÔÍ" §Ÿ¤DVÈ») Tß„çI½X®:ׄÚåcÛ¹Eûz 7î· ÀH[Ü FØ&é7ň©S5IX–Ê~_ŸŽO¦µ„KUV–ƒÙŽóöÞ/¹ëp8ËÈñÍ4¯Š¸¾;ØÞ#[ù9ŠôÏé*œÙ×ø~}ý,çéàtò2ŸuO6"Ó1mÊgýmþ´ôWèª×=­I¸:¶}>'eݺ¹¿ø¸ f™Î9èêð†Ý<©z!¼ |zŒm_ P_z[ü–Q޶Åo44ž æºþ'«¶ÅoF5”K“flo¯Ž”¼‹wÖ¿jãÎw2ÅiÂ<ŸRNX¨#EjÍ´?J¤ /ÄæO0±Ë¢eJ@HŠÛ=L…“ô‘ì ¹!Q!÷¨A„ÂÃèÍƨ”¢¹ßØ´žKHãIÛ!2º}ùùl±áÙ'ó±­R@Žö%¶å°Ëø96fŸóÒK'ñq¶ˆ^ó™çÓ+ žî-w¸/@ú­Ëâܨäš\Æöó8Ó5±õ‡Ø:wøÔàš ±`‹Ç~Lë+„tSx3îæÅ(§3©RCyF†OºÝÌão©ï»µ›iÞx©ñï3bš!Á /Ví|±i k`Ø‰Û ðlèSŽÅÆ5ÇB‡šÐ)B6,‹µËY~âÉFÄ-—e1˃_4¢5Ò‚4C#>Á?‹Ò=¢Së¬xÔUÔe@ö.¯¾jŽ6£ aà}Äb"×=1³T¸T¿‚°/¿Þ¼ }ÊÛº/ÚP¿A§ ž‘ç¡>0¸Pó×¹MŒàÃÅ„÷§I4.6ÍøŽ–z®«È…_ \À¥k‚‚3¢¡)×C“ÍÀ~À–¨X+¼ýõ]øá<ͳ»s¡p„‚'Ó×áZ?c­.W‹ø–ª8¤_Õjÿ×Á4AÂFÖ-ÁìÆ ÆUmmpÓϵz °3è`  V™!’éo‚ ¬é1ÎVƒÈEMe©ÎÄB饓ø¡ìºM»ŠqÁRÿ¸xóíš”*³E»èZCø—þ_`a_óN’î ôå(ê×3„×ø²ÆØðÂ4{‰á56áÖ¦Rî=Ì( ÄÇÙî<š¯O'‰<ƒ«F*¶Ê’“¼ÍK7ŽNp´³58PÞªî\艼„϶˯KÞ‚k!ë€<€fâþX'K Òrín`—üö¶q·‘Û°¡¨Bÿ™÷z‘+ÁŶâV»°9l¸‰¯»¤œ‰ž+@ú¦á%'Ww®nC;rfú=KKTö†Zþ'ËÐYÑYFÞº™ÛD#„e™‰¾\œ}ܧáÞ,xQ æ\ïû‚t2û¶]+i–éÖRÊE+M@ž'ê 1 ÞÏâGd©6|?ÔxèôK桚†G@T_·E›^4ÛÇ•Á3ªaZÁ¶`ötå#·nÁ2)þ"„MY&'œd̾#肋ø3)ë£ìO'ÓK1*yŒ ¬9ñÑfÀ™oðÑ—ëçM}…„hêû‚ÑÉ¿~}Æ£ßTÛ5BÏxë]SÌÂÇõªš{? ^FûPWÉx½`Ê‚(†¢I2¥VmÝ@Hû01>Ûâ|¢ç®*þÀÜ6{«Œ…µ„òÀÁ‚ÚÆ"ëçó? !3tH$¦³0ÿ³™}+׃­È!~yý8ÛV=¦Çd–HНPOÞh“%ÚŠøæÝªò›²ÕH’TŒGá( î@ï8‚p²‘8¶†ÜJÛ\¤~=ñb³çq›É”‹]ÜRæ8xx RØo†@?“íø …sn}Ͷ7³{ÜJÿ 5v›@!R¼ˆIˆ°Sn¤Ow(º7n‹ÒÉ@|“ Ü:Ú{ŸÎ›ËÊj¥€¨â= ÑD|ž7EÕv.ÇX”Æ{° ¸é}|Y¹²ŒïðÔß­ÊÇðæ0?CW[.c©pq²à­ƒ‘äâòøJ)bµI2Ag¦…¥,€Qìî p÷0ƒ£é ûHާs]°”aºú§Œ„œ×9ƒú¡‡„Œf2¾œ£t2ó%w ¡uÖ0À*Êà¸ø%ù„1'ßž…‚ɺðòY°ÏÐŒí€y'sýÿåËÿôÁ™çM·¨W!ñmÖÕ@þ?³» ®OjÄîáæ³; ×ßóbÞúÌ¿Ç6pÃu]ß·¿ÃDŬtÛ¯–k{üÅ/ÁB-Ú¾-óÚm‹| i`~3š »Må‹Ù^üÂÀV*ɾçÃÉ@tÌÕ˜[`™J%œ¸XŸÐŒxµÇBtÒ°BÉj-úZ5÷¹Ã/_p F™XÄЬ·KY’CìK×s( ÄǘgÐ`Î?ü#¬âÌ'7\\æÛ] ò¢ïÞ3Wµ.ZAPKw2K¨Êgoßû zñ7™ë´èrz[­¼˜ÕËÇÒÝt‡7ó2½ëå¨ € Qýr^Ê*¸hàNËS.é^¤“ø¸  #Þx—Ï2I ¦B’BD7 ŸðÒºjëgÒ?¨ô›xW_·wõ2y_ÜG Çx;èµ…Ì÷(‡K™êM #oiñc ´PDbªS¨ üµØBY X¦™Öm/›£Ÿ¿“ º¨0[ ó8èUÑy^Àr}3vùU*%û%þe4w”j¶Vi^å·n±Žñp䘖úk;î¦@xN_œ€b$°žá¬hÚ8ðYq–¯þê$oâ†PŸ!LÃNX†Nœ‰äèŠ\ûϰÿꚪ€l1ÜÛµOŒ‚/´øä{£ó œ ¤Ç¬ÓöÏ'Àh]•Eåö|²£Ã°w€×·]ÝxĆ@ý¡¨°ÿ#^%þÞ³è¥÷â³ Ô®ñZXŠx°g&I8-ÆŠúJ×qÐ2:—‚5](øÏS0Ààó”Ü€ÔWž~íÂ^úDœ­ô0y èŒÉSÑ×ÁE¤±¸ŒÞ³œlX"÷g?výоÏMp_A1Ð}eŠúä8}ÿ¡-Ü]h Ye(\ÆwïóÅ8Ÿi‘Š z¯B>%ô­¿Aŧ(a øÁj˜§†·Ñµ[ Ñkìò³~œ bù o½ù]b*&¦•Uj˜þS=1_ýñô—J)9Šõ˜G×±µòuIh¬¯9€ãYŒÒ© [Pûÿ œ. endstream endobj 878 0 obj << /Length 3451 /Filter /FlateDecode >> stream xÚÅZÝsÛ6Ï_¡·£gB_$€ÞSâäR'qšZîõÚÜ=02m«‘D•¤’¦½?þö¤Hš²<7»ñXår±ØßîbA9ð'g^̬։7n¶X?Ô[Ýθqùê‰ t1Æ=ÊçWONÿ–¦3)/¼œ]ÝôY]]Ï>DNœüëêõL;Ÿ8ë õþº+vÅrs‹cO^^u/H•z¤$Hy\”Ì™DjÃ/ý𦨜ù×I¬¤”ÑUr›LEÐY®ò§( 0ð}Rê$UÐWw>¢£³r½.6*ëeúž—»Í5s¼(š»Æ]tÍcÿ©8{~É7eÅ àtËh{"£]ƒú ú«»ªÜÝÞŤ¹8MBÄ ŒLY’í®9‰µ³üÖÛ.Zn¸ïb·j–ÛUÁ½g«¼®yàåædú¼¬Êͺ vS‡iô¦pÚºõSIÈè=ÒH¾Î7‹Àüåç“4‹òÕ.o–å&PþýÄé¨\z3‘EO"ðäIHæ|^ïPyÞFM5ˆžW |Ï]èö.£½øî|l+ÊzàåfYj§õ{i©ãù„ÍŒ™’ 0.…ÌNá?id† êðWz!„Š-Ë‹ÝA¡ÙÀŽR0SÑiô®i¶ßÀ²kö.:ºþo¾\—ËöžuèÒÄdr¨Ä²ºå‡‰‡Yù6á ÊÍáÌa¤—‰OM+9Yðh´Ñ‰õv–“dNY†–:î‘O,Ø)½ý¯` Í­.QßÐ"{&\®ò+²¦4Ê뱌F;°¾ì‘2¶ÔGd3eÆ_°o–‹|Å"][reÕ„µôÀßÑCõÙüE|u›º¬:hNÌQÉ‘5ñ ‡_ ¶³¨é6¡ßÕòcïn»«®z@ÇÅõ®ÇaQ7Åâ®ÇLû4ÜMy ¥÷ …Pf–i ;ªý@÷ȧ´?bÚú*íTô¢ØæUÓú8VfyÓ*Þ& Ù÷A„}×à”5@d¾Xàâjäè{ßj †~Ø,?³#ϯ¸ÞOypWü„Ô¡˜á®åeñyY×L“ïnyDÙ1ª/ š‡3 nèÃÛŸ_Í)€IiÀùâÚy½ k½Í/Q¤/õ§“P@îØG¯ÃðÏù]Yý’oB÷«Ð=_”MÃŒ^Uù]¾Æq)¢£¼ ¯9 ×y°Ñbùi2fjpRv°‡ïw9¯Â²ÉC<ÓÊ%bdúMP+FUÍ¿‚®±ãÎ7(]Ö[0¤ÙÓÛèÙ&_}­—5üPSPÅï9å€H:Þ´‚_N—ŸH81´‹‹Æ‹Õd Ô¦$¥ŠÞWÁæ–!!$|›¯Va×7¹ÄÀÁZÐBj!Q1öX Ôq|*ˆ˜’ˆ­³L÷ÎRƒ-7«å&´9§’ÔüMJÎ!•ô«¢/_¾Ð5¡_ô=© 7_òúV¡)7‚q¨²ÄŠt¨oðC§w庨OW`Ì`Èùé¯õvÒíHÀ½UÙC~G9È927K3xÌgÇt¨ãù”nGLéíaNÒ„Úà“>\oJ›!jU–E 0º,ÀT}H™¾¥N½)?殯¸V¨¶é´r”Ìvà» ?Lé)²>+9Ñ#Ã^í05ãg«[HÒ¶¹@3FŒÝNú7¥dÁ»7àkÓ¦PT0ã}”Çס³ÀÞ³UIùö] ^`#¼À—ßåËàd¦Áw“tv!MPòg°®zàÏ”3ÑërWm0ßWœmÒµ!Ÿl L–ÀDwÁ5#Дá YlÚº‡Yn«%΢üPB‚Rj©ÿÐàŸyrA®ÁM@NZH™ ÖàØÅÅ–:î‘O˜Í˜éu ¢tY‚ÜJ(¯DÜÇu‚Ýé)à,t%}ø ™NîL|"œ?XEzœ¨Þô° 92…Œ«Í×ç샭§šdƒïOíî5b„-³3¶bÙüŽ ÁTÀ‡\É›.à?Ûn+Êô[®s¬?!»="t@„& B î[„`ûž¥ž¤ `:ëì«bOCVë¯íW]dGc×qÎ’LWP˜”Ÿ¤ÂJò³5¢\›Ñ4U¹bJò88òݶY®—¿·õ'ÄÉ/»À4îC_ŒˆTúoån°Â‚‘·£û–ªXšöXx·ñ¸]4ôdÍwUSë–¢Ÿí6 \¨¹Î‡ÜF+—7qP;¿¬¼iÇm”WÅdˆ€\Ðö}ѽʈAPÃÞCdG Lï©'ë–‡Ê8ƒûeâŽKX\÷À¬PDZ núÊð0E5  k7ê6êj|̺v¢['ï•ðˆäHÑNÌÓƒ¸mwIÊ)ؽ=zOÕ#Ÿ¬È ™D/È?D/ttèMyևћ%©‡FGqŒÀí}»GÕB'ÞæØ©õ»Ú];Õ¡ò×»ëP. wSÚOM’íSÙÉ%‘%Æ®2Ÿ¨cñ²%Ž÷ÔS!Ë}ÉÖ0°O0‰£ÚJ‡o@Ùœw}|Co/>âóÛ¼¹L]âÜH™ÇðžîèJŽÆQÓ"O±SȃÛSlp †`/Âõñ°ÇcZïº|æÞ¡/rkÏœ±MhÆF£A÷ƒPIï1G‚§R€š4{\ðì ž-Í<õÿÿ੽ÿó‚§’Áˆô±Á³Gþ@ðl©þ÷Á³;_9¯–¿¸Á-'åŸè[ö©0¸®l¾!Ù.^ÚH8s"v)…n5ùÝ&°ÀB*}ôÈ8PÇ=ò©uÄtP¾•BŠLùĉÔX˧la† î}¢ü¾@£<›( 0tlÂwðK4u”ø9SGˆÂìk1‘ðÓ¸l¤Ì¡°Så{˜–{0UKœf&á)Hg©8PÇ=òipÂÎöà-6‹Í-$™/Åï1¬\BïÁ½ÙŒÈ›~hQ®×ˆ9lo«2=ªf‰‘Ô‚÷F â mº°QT«|s?çá›Ýf*¨^¦íàYHC³9Trïp‡šý‡³x¹¹­ϱ³"ú¸ê•s?T‘¤}v:/ ö7gÌþ"Á×yÃYòî^Øåa ÿtP ú endstream endobj 892 0 obj << /Length 358 /Filter /FlateDecode >> stream xÚ‘]OÂ0†ïù½l[zú]/ý $Fƒ‹7êac#¾í:t#*fɺ½çÍ9ÏÛˆ‡çÈJɼrh¶ðF­K”>&÷h}4iÇy• †wZ#àÌs(›w[e9zÅ׋év_Ô„J)±¹$T)'ż¨‹Í¬Ø*œs; ïÙxp›}ÍÒBü*:ÏP²Ì ã©ØCgã¼X­–›ò‚P'$~!NâjuX„Za°´ma´Û"mAP®ðø°i¬ Îâ §å·ßY ›d¼yfmñlvêLÚä¥óïy[O“7Tƒ>sç5µ`í×9¼Ás®8õ$ìWâ(GÀÐÓôzŤw¢é·Øï·qÆâa> stream xÚ3T0BCKscc=K …ä\.°hQº„äÎeUgbl¤±*OS endstream endobj 903 0 obj << /Length 2784 /Filter /FlateDecode >> stream xÚ]Û6ò=¿Âo•¬¢J²zOIo¤Ò Ù^q¸ÞƒV¦-"¶ä¥Ý¸óE‰òÚ½À"‡Cr8ß3ŽWüâU­Š4 KµYÕÇWAûýŠ¿½ Þ Þy˜ï^½ù9ËVq–Q¯v«,ŽC:¬‡íê_Á&]ÿûá—W÷ÓIY’|畈ùâÎ"_ÅE˜Ä™Â;ª|£Â8U|ÝÛÓi}—Æn·æÛú.)Uðv}—åIðþÓï°RdÁûûO÷¿½ýȓϿ¿ûøá'ÃàþÓ—{¤÷òiqV•@M’‡Y’ó]ÿXoÒ@÷Öt-¦Aúš¿I‰_ü2¶Z QT๫»8B…'Åy¸Éø ŸºÓ:ÙçÞì „š©0)’U¦IÉx5“–+Ÿ´»4ŒÒÕ‡öggW¡ÂLeÀZÂ"’ˆ¸Ÿñ½R¿t»aÁ3RRõÚÃéÆv[ ð\y燶/¥›æQXDå*WðÍþŸ„ö‡Îš•û”_Jh†áôã›7;» »~ÿæ’¥ò0‹ï$Äa¿$dÉÂxnV9pRe“qÿ„ŒÒý? \Æ2‹@iõh†Ao6tü­QìEpæYÕÊòÖØ¡7ã ¬B$Ý?çÓF£å‚nÇ \‰j¡Ž…q3ySëÖÊQێȩǣnIÑ^óf¸LNFhSµ{Óîb†åƒÚNP«Ã¡Cìg"o²Æ¡uª0UyBº™ »À ÃÒ±ës¯«ã,ôñ ¯))’_†±Óå‡IWÎ|U¼@´k°qô0¨Œóy|„çòøãôn˜ñ°·âé”_®ËLï w/ü;8½ëylÉ0äÁlx$‰ –»¡Ñ‚ùÕ´[¹Äã …E¦Õõ_-1 V*µðüì(wÔàiQìˆ;;ðȾ4W€2U0pTÁæS_Õƒ©‰Y°2Á«ÓÖ­¶fßjÙOºŠßê+ÉYŽ>lpÄ P¶€±Gç^å)#2~Û¡bðµ ß]$Bváé¡ÜFëÀ«§Á»³lèX¡ûÊ’Ro¼=âùa [ÝÓû OY`aV˜\ØSnøx+È™¤`Î$EìǪ¯dUóÒ™‚Œ Ùôh—<AôhÔ¸MM ‡Ä` ± A«'>íÔwû¾:þ—Oõ@iÛ¹æìHÜ.c6møöúX<';0²h^ZÀ¥‚!ib3‘|šœ0Z ēǛà ‘ e"Àð̾¼´+ÆQ‹€£@ÃF+«xÔ•·‘¤Ü;IZÅå$i\˜$ ô„²9!‹’<«§çÿ À9óñªÓé@¾q«ƒí ®$MAšÏ¾ww!IÍ&ÌÁ‹ÕÊJ”`í º›^ë Ê[‰ “4'G¥ha\ø0”¶›jF&½@Ü^ïtßSxB81Àbd²“‚.Ÿz7êb¿’H£Y9nº©Ù5dNa,ÏÄSe¾—„»²l¶;š‰¥ázS <ó¤!ïùämŸ•ùžr>~‘À\ò€+†@YÊœ5ÃèZôÊ UÌ"‰`™sºý^ÙÆQuä‘‘sçgÀäÙØŠ)¤nÜc«˜°z]k3½•(ûZÆ5'&[™º‹Yea°×Ã5§Œ÷$S•ÄU䇲c4Š Iê(¼ÜÁ·t}’X¤Lä1ˆ`@`LMJ“Ä, º_¾rM«Ÿ RÂm“Å]ê”! ý³½2øk+ ÙË¥Éö·KµK ÁÅ´û¿HE(óñä Ét=à$ó|ΦÚ½ER”“õâb«)jæ¬Êø=­1îp`s2B8ùHË·ízŠš9ZûQ2{ïn9“ß²¤BŽê*û÷Þ´øé<ÅâS"´ß~/àF3Ü¿$л¨36pM;¯¸XžØß~šü¨˜î‡Ê´r  ñÝ<šƒ8¤žÙ1Êâ8ϼ4Š©8"HóàË ƒ« ¯YI‹ËȶY…`r5»³` ?9iþ’|L„…ˆ.X oT U³³óhfM¸©–\’Ù%þ5¼µê@©}"¾ ¬Ý³ñ‹â*ñJ©DJ)øÚ‘Ï*þÂ’qÊñÏ–ÜV>wŒÀvnP1‘;í(s~ñ¦:ñþ‘Rü< N•µ<¢FC.áæÌA€s5ðÖ©åbÑVG £'„Jn˜5Ÿåõ³l¨Õæ<Öˆ<ç…<¼ CÞ×%WÅdEg< Y‹?ñÈÔÝÍ•FìT2Œ´"ÚÏqÑ\ Y5ß’ËŒ}G½¸¿™Ü&Ówœ.°rì¼u·]±9zÔ p#¹Ôì4nªôß5sýй®‘ÑäïK‰/ʽ RGÁûÏy09i\ö:µô\86CÃx³Wè`}²hàYAYBŒžw:‚÷ⱫŸïn+óÜÕ¢¾k½j@Mìf™ý)Žv¸Ž·'|;îëþŒâ”}rî»Å\reÄÁ¤Íu ÈIk†ïÍ“dŽ[zOÕB”yË=%e0.ºç¢óy}E.{7ðˆ7hÀÒRòýÞmƒZ$‰Œ·3YG¨*üW8;À—m¦]Y,NcA 5GOELô·ÓA Bº”Fº—FÛî¶ÜEž®8vÕJáKJwó]Éš/Ô]dï3Gç‘)/L©âüA2ôVrr xª¸)ê äsžÍ(Ðóüg4½ËóéÑWüØ$CPB…9âò|3—çaú4OŽUÏw z%Hs¹¿ª2ö-°""B®ó„|îY>\Ì>Ê1Ï+pqÕsy}5ˆFn¯è+”R]«»Ñº‚ЂÌ=6œs›KBýdÑš¤—ßÔå/…¨Æ@y gÅà^¥áT.N¥4œÊ)åcd’0/T5a=ä3j;p#€Ü#+ƒ~lyðBh\ öíæÀrS©/µ¶d ï7T»dÔv¢!Ã~0qÜ7ÓŽhB»»ª dö| ¹L²tص?R]’¡dby€²ÃÖˆkãÂÛÏŽ’5Ö/ع9Þ]Óà$*Øz¥Ø3"RºÖ\ôÙ*ê5 q¥H'?B}a€Ï6—^´õ°eú—]¼äVk)äjö Qè×WTaVŠz—R·‚R7˜UÒ0R4¾ë‘Ô¨T\„•Ê5¥Þ_-ƒ'³âŒõ »¤í…Û·K¶cuRÅ’|Ñkî=<7fÊ#K €]Lm¬&)ªsK®Ðs.Ä-ì©ó ±ES8 ˆÓZ!iM5¢/k„x†3”k™*|ë`7œã:Îk‰žôc€w ÔÏ$Ö—®-½î¿Ñzg' î2Ó¥sóa'}¢)1Lx9¹ÁÕÇX×NÁ ¦B‡‰|Å-FÚS܉»¾;ê„"÷"5W°5ñÀ-AO¶gRö _ý ;Ã#&⟂,7ÌFƒ<‡r'O áå`Ý5¶ôT¡îoYÜì‚~þ(ÐUâ½±þ¾ü÷ÉK¤¾){ÿ-IGWþ`û}[ë/ endstream endobj 906 0 obj << /Length 2521 /Filter /FlateDecode >> stream xÚ]s£8ò}~…ËO¤*ö sóUs5›™ÚäžnîAÙÖƒAf¼¿þúKv÷*UAjµZý­n9Z…ð­ŠpµSj[$ùª<½ ÚV<øíÓ›Hð6€¸™`þãáÍ/Ót…Û",¢ÕÃ~Jê¡Zý;È“›ÿ<üs¥òb›ï  BÐß3Ûpí͇‡ñ€4ŽÿONóoX‰ÂV“U–'ÛH%|òGÛ躾Üä*¸½Ù¨´ÌóMœæfÝAIpîÚC§O<±¿iÐ;£{Ó˜ŠáeÛ¸^7¸¹¯/Œóˆ3»vßãôþÓÒHâ&Þ½ÛÞlÒ0îo¢ (2àÉÛ¡–cš¶' n"–f©m”²0 IËGlâTyÚÀc@ßò·3®ïlÙó¬‰ëö||^ÐMŃÁ´{üÆ"Ën" ­6¼z¥tºÞœ‡î [g9Da²7º:™ˆ_³C„ÁÎS¯tr~fQ1W1xšh‚:â%ç\ª¦’mZºåÛ’Y(žËÉ Z¢® ¹È˃Ág5ò›dçùfœN°¬óÇðW_:ÖÞWŸ°Â/îÂþi%É\ɵ°äÅxDì{v( )+ýì}~mÝV¬f Á2‡;Àù±+¦ÎŸLl+SIâUq:¡à» Ù8¶xN‰Ï‚ãaÆ7è’lÜAú‘¾ÓœHGà£Cà µbð}¶F š?×z?‘ÌHè/‰Sî‚Ï´ž2³¸lÙh>,ʪÆ]Ÿ›&GÕÖ-½½p¯àcGÀNš{Z˜±¤A{¦Œ(.F•N6mlUËÍ©E†[öFÎbA¶7'>„;_À˜j¦w~Õ.ßôPê€Ë­¼m¾~̈äé㾺R.ÑwR˜?}‘W#nîܸ"Ùºæ¹<qk¥fÑÀ±õ}`œ©cçúœ œxÄIÄœ´““ÆzǾ²Z,¨¯åŠ›¿¯ÙžZ+Nà_¡IN³à¿>H©£[g*ªº £&÷<]AÍÆM´ë%JD"寱¿kcŠ˜ø¹ï5–¿¨Ÿ" >Oï¡5cyN ɽEüòºB%1Ê01Vj Äí…äzÊøMÁnr~ âÓ“™©–<¾Óg,d†de{hìd_{jާü !𥠗 ¬•e@‘ùü”aëdDúÌ’¹°Bøú6=6l™§¹rGåT9Ôº[H òÀz"ïJòzƒæ0èfºûûÆ0œ/Ž(kåXÞTôæŒ0~ÎÅ‘>µL*á vôctPŽq¼SŒ‡¢üã!K/KÂÔÖÿèó?¡' endstream endobj 801 0 obj << /Type /ObjStm /N 100 /First 916 /Length 3121 /Filter /FlateDecode >> stream xÚÕZ[oÛ8~÷¯àÛ¤„÷ë  M&mi7iw;[…b+±flËk)M;ûÛ÷;’œØ¹[i‘ZGI‘‡çòsH†˜d!F¦Œb!%f4Þ“cN¢NæeQJæÕ{d»a uQZ¦¤¢kQz¦¬‰¨IL§XTŠ©h=j0`Œ5–i©©É1­ŒCÁ£à©˜vÞ°*tL((ÍŒ”q5 DdÔÐÔP‹‚FÁ c4’«1ú먀¯hˆi¬uÍV㋈ÅYcã@éȬ42ú8 šœ£‚E<ŠV2$¦°ª1‰Ùh@¡EŸ¤©Éƒkô¹5(83ˆ.¢¨&0§Á½hQcñEô’9G ´‰¹€Q£WÌ5Kvà¶ÄÑkæ}>B ¬ñNÑÈhòMÞ2‰xg *€AcMÑYL€ˆ°Úà´KPã0³mjš‘ Þ *CÐ#;’7„%IÄ7|T ‡F·žH¥‰õÁKð˜‹ä‘ˆó‘T£!,2p… ‰% FË’£¨Rò ,FÇR$MŠ¥„Ž1zÒ(…ƒFIÓL1rÁ äÀ¨H+±^Ô‘b­*§$T1*©†îH¥Ô‰’†>Ä„&üµ…ºbä„QØÏHJRØ$©DK„¼A“ÅœH\‰ÆK«„Z(-ñ—lBi|k¢’†Ø¡aTjØ‚yµÖ&2m¡º`J®ù–åL<~<o¾Ìs&^gÇù@씳:ŸÕÌ/ÂX÷b?¯Ê“Å0¯‹lª~ÍGEö´üÌÞKTxCHúÃC,ð-#5ýžÌf%†zߨ}¹s°MÅmi1P~wâ!]p›k2ß9 –™¸ræ{¢}ë–¢¥ÿ‰'ˆZÄ=A9–ã-8£ÿYù¦db—mÇ?懧å(Ÿ¬Î¾ËÞ‡Æ)ì3ñî÷ÿ@/&’ÍN&“7ôqÊr`ÀZ·=(n3ñaJÛ}F©|W†I†e5ÐT-ûÊéeCdƧËa¿è×u‚¥eQµº :Ä»W‡“ˆŽSà_Lgm¯åð aj»{L¼É?×ç€ÖÑ $ȶž½~ɞ˪®†‹b^³Äµ{Ã\äz9ÛÍêœmíþYFàWA'å”ú)@¿_ËÑ-]Ö$ÿËçúÙAâÕë_™Z¶>ͪ¼a©xþÛ˃Ýüø<Ÿ|ÊIëZVïæ-yå‚EÙÁB;"µ¢O±¨êq¶€×ˆ—Y÷Àˆ£zL°  áºm«ƒ —¿«Þ®úé†qÛv84 —º¶ÏrìËsëntz’O^§ÉPl©oje3Šl~°Ž_fÃrTÌŽØ0{2«ŠeÅŠù#ÕºœÖyÞÊà·lš_'Ÿ§ ‰Ïâ‹ø+_”ÚÕî“~U6¾Î¸ n qÑ­Q¬¸‰[;Ç%Š;oÄ®[Ai|Ö0f ¡Î0Ð Ý%„ú;ÌÎÛWÏßÝ0*|€!C½ 1×ý6…‚—ÕçM ÓAAË=›LKË7™«eô½Ìk€L&†ç³2c1þ2糑&ÿ„kx3^äy‡:§× ŽŠ·£ŽV—PG¥;¡ND*µLS–z}ð|§-Oâ¬q)1i%2‰Ä‘Á^ÄÍËÓ|q!€£ìù¶îb-WˆoËU€\‡»õX‹òHý·‡Â_~ÿçþîÎoŠi^mï—Ólv ¾;*· †î¦˜ˆZ;ø‘ç¿õ¿7Ý$ šÖ!r5’º 4i§âú8p¸cúwï;ÛNlÙg€óõ1žR{%ýСiè|ð+@Ghv Ω‹8çä9ÎY/×qnO¼¯´{ ¼k0nÒ¢Y‹egH6ɪñË–H¶^´n/ã/—±}ÁK·Lb÷1ë¸%ðŠHHp•H¨5ÓÉs®ÎD†ã¨ï—ÿ«Ç›³i¡ŽÜ—nš–°saT«Ó¢Ž!ç‹(jÜí(z¡Ï•(zE?lƒö·£íYŽ|`=üN¾˜Ò6h¼#Ú^­Sö²C4›9Ä•õZÙ# _ËûWCòµŒ¾×ÚÜ¥µYÓ{möæµ] ðÒ\ºDš }MÙ¶ºBÛÌÍÓËî=uïª}º®¾c7m0·ï¦{ïê½íÞ»zïºw»ñf¡ Чd!aÃmº9Ée4´±Ííf›n£Ï|T¼\ %9Ð> £¹õÞl¸HÀmÍó¤T»i%z#j@J6œž“cÈQ1 pÃ#†“ÊóYEA!ˆÒûðD!„°y„{`U «¬«¢¿7YЫyóp›óÊäÉ…è›Íh+Æ=$U*î`׆T¼U+ã%T,ÝCË¥ ¢BXbì¶”q;Éd¶}v° ´i‹È‘“±`—L˜±‘KO£ã3Ýûñä66Å"Ïóa9ŸÔù¢*‡E^YCŠ7;X·ŒÜô°KÀ<$e&A3š8'ð(ÕwC"À˜6`#"b£ ¥è6=Ôe‹zZžÔcžNÄÿ†ãlF!kž5¡ÒǬUâ°,ÿ¬>¢c1œä•˜/ÊÃì°˜õ—Ô$²iEO>͆|>:êÁoà`ÒíÁ’"Èýû­Ã88?YŒNòž‡• “œèÁ09]D²Örº™äMv< M3$®™mqßE:mŠg ê4«ÈaÕ嬡j\Ná©&Ù_åiõg&þ[Í{p̹È5LRGx(˜¨ó0‰¿ê(ó¡ëX‘‚yÛ¦)roÍ}ûGd¥W}R3,w€5—Ú€BGûôIeÖA³EÔG·ÄfÑ–˜‹÷O‘,zNä6Ɖ€ôIÑý;ÞœŽé6pÖV%›„›í¡õÆG®¢nqƒ&8™ÔÃѤ‚yf´á‰®› Hsák‘ûÀ©ßQNqÚ,3ˆÐ‚ôGÓÒâÈqÕb‚n¢XóÕˆò=¥4ÐUƒøÞ2 û·A?M­>ÑÞ;\MË&c¸6ñ«¹Â>f§eã\ÎôIkÚÿ G“ †š(ØǨ,÷ ²¤Ò)•ñæ]¼Ì[À€=ÛúSÁ ÌCQD»ª¹®*ÛR:‘VÜo¸•u…kA8*½N²ÙÐÃ+Ùn²i£ t}7rëã·#‹ò¼pûÍÈ‹}¶\Òw¹…ôuÀ¤/%€IÞ-Lîbº-õØøoàÈÃëj×n{J½¼¿g*s AçvP!lIC¹Œ•Û©GÚÐåËý㯓ÞJiJR÷º«Ö[1.ï ÜñùR1V×¾âaX’æ"itk¾ŸÎ&){ÜhÌÉ„Ü1"fµˆ=°É·mÞ7QŠ£ê¨Ñˆ BOݘ› äÖ>·m%­^O¼·¾$é/ ÅöÔ—$Ý}–vóþÄ\m+ endstream endobj 910 0 obj << /Length 2921 /Filter /FlateDecode >> stream xÚY[oܺ~ϯ0ÎË‘ØWÒJjŸ’4'ÍAš±ƒ¢hú K\¯]¶¢”Øÿ¾3ó µR¬¤…‹3’ù×\„ôg.òð"¢ë<Î.ÊöY(Øáþƒož¥»"«åËÛgø-I.Lx‡¹¹¸=,·º­.þ¼8.¯vY`»ª~¸¼Š¢(xñG|ß¼ÿă8xóúýë/ÞûáÓËwo_aLƒ×ïo^_^™½‰wA–\þëö÷g¯og†’Ýîÿäœ)ÿëÆ˜ëýÅ>‹¯MƒûÛ£%î÷Qð™P7n´-Ãq𮾊¡¾4˜Àý²þ€oÑákl9Å]c±ìÛ%‰¢¾`¶îÊfªì¼„æÇcÝÝ?'TJ„ãј~ËѳD{¥ç½ Dz¡»^™èÚ$`¿ ¹<¾ûÆÒžQ˜ðF#°ŸÃ$,èŸX;ývt©’/ÕL4ªl5ãå‹óiÐõC[4<΂ Ð÷T”|Ÿ/—É>(îéN@+G¥o’ÿîÀ¯úfÒwVä0*»wÓ¸º—ÁžkÙþHTû½ðíSbiâT :b~ø‹{óHÎÞãl†g{užYHcRLBØÆ ³ÃWVuzR×<êY=¾¶ƒæy<9»d(9nÝl¶hGš«G¾"sþi´âŸàmÙÑbä`‡ðu{jl«4˜*0s3Ò%‹¡ôv8¥ÝÁ¶<¯ï6¬nuN1Ö$WÒe-Ñ·à‰¯—¤ÿ¢nTBa 6à ƃÓt×ÐiX«{¸~J/{¹v¥ëÙ¯/¯âh¼;íJZá,­T¥EÇþò|K|`l˜f;6)zûÀŽ£,hmÑ9ø´ »fØ:§r¨ÙUU>Qðl]_¶Cg9õÏ6Yõ|ð7°á4 ™@¹ûä\¿u‘¾S“MCØ}!b8 Îeý94q©THwì·B¨§ò˜9­u§BdòHL.Néð…­¤b+ËC—AQèÎ&OÐ0uNµÃÆñÙVHål.q’iÒõ0+‡ú4:|{^îC¯ë;öN7-ʱþZµu¯Ò8 þÒóå¢9eÓR²,©À¡Õƒ8Ñm--(˜QÜ!Éfþêû:†ÇZÇXv¹8Åý5W'ºÁ4hÀr~g0Ó7ºáw‹8 2ø4Î?µÃ`YETÜ‘ÃÞEë-cÅ Têd<êf­qìòhñÞòØÖáKñÎë@vœu˜ ÅÉÈp¤>yCÒ¨4¢ÔW4’ày£ŒÎ†ËI‰„ðÛeæƒ )ø¡à,ùÐÙ÷³³ïþÆ{ U·ÎCëM¨Ê²ºZîË<ÛÈú„ËEé•5y)Ë.Ùùjƒ¦g×§ñbÝNPâ£iÍ·ä«ÁÂÓλÕ^K·$Pw#š#ÉY6Þ$· Z¿{õØm]ÂØ°ªCöT7Ý-,Jø‘j‹u†×††}Z<Ÿ"ò7Bzßá(M949ØÿLõàkÈͪÂMÞ¶bªX öŸpÜIåÜ9»Ô-iU1QÚkyvêèò(­-(Ó°‹A¢NÈÖ$\ô(q‹Qã ÝÑê>>Ñp)»K@ œ)ÑŸpª#7 ÆG®°‘r×ipÙdEI¾í°f Ê%ÙèH\0ÉÏQeŒW|ÎÁcpØRÉ8 Ö§+Ýcû«Í‰J+„pòw±kid+Iî»Z;jt{ôý˨sJ`6-ÿDX=ŠáSW^PXÙY)\< ÃÓ€¹©kê¶V†öï%XÓ:Ñ &Úî%ZÌI²~‡§™Ð*;a?QàÐ7R¤lDðÐ8Ìù˜E[(m/JˆM—èŸgoaHìhIš.HÏq;÷&G£Yœ àQ@v:xBd™%Þ'é&i£ûœtJ?ºÍ¶G­õÜéÇlT_×ã4¢<@_m\‘çX|ï·ƒhÁ¸ì å×¶$tŸ­îýö ´ôL†öòàPÔJÁ[­éð$p ý*oFÍ⊑¼o!Ѭý€f¼xvÃ1™¤)ä ›¡õR–M$ŒXúwU©¨(X?i Ce<î8e^NÅ=²t,ïtÊÒœâsñí"ŠòHe€Ë{þJNÃ^ÝYuÌ¢rÁ5Z¿mì%'ïô;ÃïòmzÉ»„H˜…þx~Ö;¢‹o5À¥Æ¶¨ý†’:v"9O£áY|<Ñx à»+(n-¢Ÿ<€I§“jK•‚/Å!DûR›ƒ™ë ÔiÝ­h]Îß#úíÜdq‹Õòš¢ÊÆœ T -=Û>P±áÔUÉ·7Zá.Ÿ5LŠK"_?ñ.¤ÄsUäÚàUeš¯É0¹¬‘È@Ú'ûM²4¸eÝsHî}yÀ F‰“DlÓ¯æ¬[Ðw!€‘ ‹fðà·x”@<é8pTõ†%þlÌÂS1AAJZ5+×6;)÷‰èX4‡çxÔÑ*é)iU¶ÔÇZc´61f)LÝ“xS0;_’¬îXßÕ›zÇñ3ŒVÎÙ~!ÛÔ×îHghÎ3}3ÏÒ%Ç X{«< ‹ÊDÂèLзUv~;ªu£Á6pñc}Ú IpJ$ÊÀf"yõÔÎã|ðéZ™4_1ÎÏ{<,로ZªäºoPzä»E5¢HÍÄ;),øÒ”öœºÂbn–a«õu£$Qé ôŠÛ“àFàÉ£ç6Ã7úü³/Þ®ª?i‡0[‘˜HŸN5‘ך›É,ÝÙƒ¤¹Ÿ´‘¶TŽ|€gê·u¿b×wö^ôN諲$æ÷—8˜;¶ú,õJ$Öœâ=÷ï •È”÷œ ²p£BÌ–OÛ ¹£=ª¼TÖ¶~Þ“x$y+“'vú’†)E|ﯗç¥$ ’]ßô÷Ü›ÝÚB žO:̬íd³­÷ÞGW(N\ñkûApSè#‡©‘G¡*à(F†B…û—–éix·úf¿•1ºæ€/‚' þþöÃß0Ú*ãä=Õ#˜ÜxªúÌÙÄ¢â`¢Óú3™˜¼›h@Tgá)“ç{ lxÇäUŽ˜¦P@oîùð6÷í|˜RRc>µ7LB”OM+ ~ô<çßL䉟ì4¤Èi°hù—ïÿ†³xô endstream endobj 915 0 obj << /Length 2700 /Filter /FlateDecode >> stream xÚËŽã¸ñ>_aìed`ìˆeÉÉi3ÈÌ.‚¤±AÍA–h›=¼”´þûÔ‹Õvw>ˆ,‹¬ëeµ‰á§6Çx“§éþ¨‹MÕ~ˆ ê.üíÏ”àíq`þñéÃï¾Ë²Š÷Çø¨6OçÔS½ùWT¶ÿ~úË&-Žû"?‚þ2™ÉØî‚kþô4%Éo¼ bþŸ«(¥ö‡Í¡Ð{•j>÷WÓmwIžG/Û¤ˆú '‡¨ê»m’G¿"̼0¬d¼ªG ¯lw*r[ŃšÑž‰Žûú ¦E’Íy­´~3‚Ê'/†—J!±5ÊßTfv[°£èÔvŒî ý¡0k;µˆŸ'Ñͱÿ´5½ªƒ†;–#–#aL7[Mý44/ ⇃¹mÑ.ÊÑøåÛtjìpå ©¾¦duã,*ôh°SdK41Ó'―¥([Ú3Û!ƒ»~Ä7MTÍ`}%)™cX¶Â²’eƒ%´µ"utAd9YêåA# ngñe™w=4xSì]ßí¼×hí0,úKbx®EÂê•5« ¤LUUï&n ¸K~NÎóv#ñ#ÉžAlsI`X(™D‡’á³É ¥¦yÌ…—„2ë£7k”§Át•Y¯>7‘ë\)± Wà>:QÞ'Ñe Òl@ê Áî-¼ªnö=¸ÎŸj1££x {ê‹ÌuöÀšž=Eêœja @òZ÷óÆGn"Cf7A1—âoé.¡—Ô0Áš+£ãEP'!}^"*Á·\Eó™×„¤_Ž _’BZy)¸å'ïjÞ¸B®â£<€Ó©{a ÓMÒ!7²€(v¤)GdÐî–µž‹‚yÞð8›,ÌϼK“qnÌ#ÿ.rÎÞ÷ï?P&A—ÞÿîÝ*Pÿ %±Žäô³7´™{‘,âÌ9EËfÑ-ag§ràô)‰8½RK’&†$ŠðÊ•eõ(sX¥{ŠÜ5¡LÞz¬èþŒî·oæ/dÇü.ÇkÚä]ŠbY…´<¢çß9.Á¸ ÓôM˜ÐòÅî˜kÏ@ÀµcK0Ö±^.B,³8”ÃpËl«ÏQ(™¡Ø—ùe Ñolg­#öêñ9åuR>ëè8³@»µâ‡ÐIj Ebî?C¥Äí”3šÜÇíå¤^ ß,>5†ú~¥õJ´¾¤ºè„]ì¡X„u’¼;³ ùjÎë ¼eqÆé«Ò*z¾ö¡¥ÃR"ªu˜ö%¢’2p‰œH¹33%ÿ˜¯Ðú–¬/9ú´¦çÙÞY? f f$}‡%Oç rÙsyÅF€8˱`IÞ åY΀ •ÎÄ$ê¦1e à #K’'¾1" ¨ˆN e™¡#…IÎ0c²jªÌ2ñ¿xä!c®3ïœa@Òç!1¼Z[ô†{%£-|† Õ2%\0ÀªŽ¸Ï ˆ®nH¶i.U|¯Ò6 Î ƒK nœÜ|%§u15H<Ë2/ñ<$|v(k˜5‘0µ&!å’÷oGÌÝžÑcÔAÒ–bŽ:ž±A6³‘ Ôt0*ŽŒL0kö t_M…†¬ûî;ëÆÖ\Þõn¸H‚Ù=gx¿3—8$¯eÐ {Àë`@w¾BáËHÈhjñ&ã;A¢wñý™ß6÷1`ô1ÀI^©‘`y{Æs’cc$·¤ÙŒv.)h(”¦N¤©-~ gµnM9û÷,ú6¬ð…ÚoÅ‹Ù;Bé‘©d¶PœTòx‡‚å¬3ÉÑp 9O˜Õ,yƒÕpA˜cZq„¶¡31 lÝ?°¨®/Ò’! }â1‹0-gÓÆÀ`¼¶Ùas[~õ'NÒ#©·’hAdìÅ2lÚîÔqŸ$"Ëo±ÿ†‚öfßïRÒ¶R”ßãô®‡§WY¢°[D¸<5z« º|¶>äiÀhŽÄja…¡‘ý«•÷ô ðóq‹eô<¹|4Ö1¸+ÇÉãR¯uà\×–jÓøbô®]™¬Ú•q¾”»|=²s$v#,®Ÿ ˪=k &øâp¦1só7õ18–x«’çã ,R/Þ–E)i'iifÜÆ‰µßHöÍÔY>¯–‡±wåůÉ`⣳§é­nëÜžÒ…¦ìPC,¨ ‘Éd”ÖÑs¡òrÁ¨3šoÆÏÕ»¦ìµQfÒ´"Ôqà3ÃÔpŠJGÝ÷–hŸ{Ô7t@—FJzבn1¥‘c#‡£#¹ú=ÌmUX^µUÓƒT297ž„DÀÐÇa>ÛÉðÄBR%¹Ñ3'Ýr‘"‡§¥E=Ñ=Š¥/My·–¬ Ј¡ù˜EßwU3I0*Äþ V{‘®þ’aë/VåT‘JíɺÄù¬Gž†1³Ð"e¤\NoEqÊÒ°/¤Í¾-†Î­ÕÜñA;˜ÙÜ‘BÂßðôáýÅ}· [ßQÚ ùÚoiB«CЄVù}ZÑ_b¼ôZþ*_•³é,‚…Á@öñþçEVÝg˜Š«€ý>[WÞœqà»–9Ë @’£ T˽ºúÁÛÉðgé«V€¦Tš$Œæô'e3ôß›ð™d½pwÿoý¸’íü endstream endobj 919 0 obj << /Length 2973 /Filter /FlateDecode >> stream xÚZ[Ûº~ϯXäI Ä®u³ä¾å9AŠ 8H6EO¸½V..)ewûë;7R”-Ÿ "r8’Ùo†ãÄw;øßvwEšnYyWuovD5OwÜøöéM,|`Üœ¿<¼ù˯y~ﶇÝ!¾{8†¢ê»DïÏçûMRFº¯›—ûMš¦Ñû¿ò÷Ó×ØÈ¢O¿~üöþ Sûñ˗ϸ _¿¼ßÄû8K¢²¸ÿçÃßÞ||ðÊ“äÿÜ9rþ­Çq±Íãün_fÛ8Íxÿj{¿Ùïwч¡¿‡cüÄô+nï'2ï7ù>ú—®F&Tº–ñ¦l † ºC9Ä$¬®/˜÷Ï'ä}µM¥Z^÷|GF¦M¼ä!ú}—ïè«vª›þ‰©26¨À»8ßîËün§[8.S„—¸;šæq81Q:]7SòcØX¶K"UUCwV=o¹Äƒ tl£R`šÛc´E(¢¡—]ý;° “©„í÷]œ½8YnUE[ÝÉ.cÞf=õØj¶ŽKÅd²S­&;2Mûʄɲ†³èÈ×Fv8Ž(ãÿQFópC7=jSá÷¤ú'½¥Í€n°üf©øã-‰ 1häÎ@€H¼—;OÄ@`ü¦„ÌŠy/ô€²ŽÂYPÈ:Ó’bi~¶Ø†;b u–›.m( ÛHóôÂ6òÝl[#|žM3ŽZ$ pû©62ýç=¨IµM̓|S8säo«••æx2Z¯É+]2ø ¸×…ÊÞ;ÙÐeÙÈ`™Ð¤h)™J’†‰‰²QîØ3› 0Ak ƒŒ²íi‘o'tX†ÁÁŒ«'8[x >Äyéà€~3™–ð!Æ¿iôÔ°ÑqOõ¬p\¬ÚóIXeÖjüË46Rh,¡‘Ât¬†‡Ðžb¼vYÔM8ûÛyǵۡå’}€CéÁéß@_ ~$¬¤¬dÈÓ¶LñRØ…‹À…‘ .¼d[z)i5–¿p\v`p?ƒæ‹Dg¾<XWŽô¥©to5yeÆ–°N’„! ÎC¨•\¡pxÔ‚öµ€ ¨-¶h¨UjuµÞ­ØK)÷´½2Å4 Ãû¨øÛ F( £žÙ^q-¼êð¡$¾j §„Ü9}ÃSÒQF7  l¡“P°gŠ~³¦]ATž@KKäPFTú^È÷’G@ÃG®”lÔï”zü­9§ßï=_;è(7"EP³M½}m=oàÎxmÄÀ8Í~X®‰ÑoAá-“H½ðK'ŲtÂJQp;uŽ/¬½}ÇÅ´çSã|`é´êeWö¡Î¯ÿæQ¢#É’8½zø”oYù°¦cý#9Y, ]Æ\LôL'Ï{èM÷”˜Çü’àæRJ‘´]3˜˜êšùÅÇ|fA§ÏP‹”ɸòÇnž´r  ;R „J0rÓSP°à²+RíÐ …KNÐ{ÜÂø~@d:eOTL¬ù}Ù¶°Î–³ÀÏÂ_kxžvM/;À»Ôbw—ÊË—%ÀD?—–{¹`—Wh=Lãq’:S¥X«V'ª¦asv0JÔA s€ª}y‰_Êû×£RÆ&ÚÎì‚F¹JÆÅÝüŠWN¹`N%hü`ØTS«„¼<8R‚g²ì ©>×¼%ªÄòeÎI¢‡Í‹ÌX[{ë8R,£ÇàD®å:´æ™«wYóYÒ]„õÜÚö'D_b82ArÚHE¯Á`ðâò²‹ls‚¶”#‚í¨ÆÉ2‘ãy±Y yN9˜êM ]¥¼†ËÜ'>›\>&Ëœí€ÒÄFÊVá„|qË5T5N®HtrâCé×/ÕÓý¶öÑzÙ5à'ÈAàø;q56wù÷œ¢k‚Ø÷×#KØlq¹¼üq%CãÁ‹‡ÛB°’Œ:“˜ ÃkŽ¾Ìœ¯|qP ÊB6áqd”‡×R„j<¬6}=áo4ŽQ• V9 êd¹ž"“§Þ?¨¬_\€ÿÚ”x2çÁgCI±ˆ…iUêj`˜æâã2s~Nè–˜ôÇ?ÜñlGð‚—wÆi)I¡ÏîÁQÚV òúÌ;¥Õý-ÿ$Æ+Þ»_Ö$¶ÇËØÎ{ã0öÂTV0Ùœ•ŸëÜn+]ÃÆQÕ4ž†5W5Í\¸0úƒ3K‰<ß+’9K§&'ïÁyžÔÜ£HEl¤îp  ý¢«iÔÜq÷@7åæ ®[~ìÒÚGr#›Z¼sŒ³,—…é{Ψ‚TùQ(¬z¤ý¶p ¤pݹV6œ‡f.Þ/,6Z&¬¾;€á;¥ ”¾ÆÑÖýŸƒÿ=¸Î­ endstream endobj 924 0 obj << /Length 2758 /Filter /FlateDecode >> stream xÚYYoä¸~Ÿ_ÑÈ“ Œ;¢Ž–”}šÍ… v7‹‰ƒ Èæ–ÔcµÔKJãñþúÔE‰j+;‹,’ÅbÕWÙêß:Tñ¡HÓc••‡úò.&ª}:pãÓŸß)™wß>¼ûíŸòü âcWêðpY=4‡Eey÷Ò²:–E\ˆúóÜέžpìÝ– ò$ù?%Á™_E)u<NevTiÆû>tíÝ}šæ‘Îw*íEOf˜v¹KÊhv÷ÜüS¬N5ÍÏ¢idj;¸ÙzZ§eîÔ ©^IMf ^mÃäó<Ô¸ž˜ŒgÏBä¹XØØ4ƒe¨3еJ*gÑÇÇ»ûüýĆ5*ªqï|eeË]ãä;ðwešv2ãjÛÏ(]K2N$ã u±,$²=·Ö½˜©ã–û¶å6„lj={ÖtŠRNQ{ÕÂ@§ÝæHŠÏ$Z2@]tÓ—yù±(eÞGPW‡|EÑÆ™;¤ë2â³¼2MüõÊjQK‚Áß‹,úvžxˆEJ‹lÿóll{Y­à c©•9悉Ûúz¥‡j?Ëp‹ñÏkšÇ–P´¬·²~à£ì:бQU¡ Þ¡ùU©*AÎI›Áñ0#úÑô¾ÒO#l+ôLÒw6q× Úð‚M(DB-“eR&mÉ ±Íñ[7^ËÎûá¬ý¢/×¾}ÏÁ|ɉ/¤)ŒµHÆL@äGv1Žý™?gÌ”Ó|?áâ¿~ÞÍ Œéxcæ"š˜ˆÊÂïÕ’Ÿ}6ÿÕ –pJ€%&Áî0 O3Ôýìùè·›#ÆölvËNÞ¯¨B?j™êG7‚"ÁÍWñS ÙDiígS“–!órµµZv& ”i„ÃYÅ „E33iôDÏ$xaCã§­„òpi-¶4Ö\½sº Ù§}VŒCÓbwuõ؇¤x¡1ÑeɲþìËlŸã|ònü]S“e¸Ó΋±wžÿqœ4eqÒT­Ç9¢˜Yô¡®)®ã.R*|†vâø¾z@UŽwgè,Q;wÝÁ„N {¾tì'>§!›ÝZ å›\ÛŸw­æ·†«t.ÎÁØh8Î[ÇÅø£¶)Ä ·ñæ4}Š\vL¥š &­ç.VÏgý¥î±†kìÜ{ʵ—œí8IM3ö2õì¹B>¹G ¦DÓµ»‰H7fÙ ,{92“%Gb{'G6èxq%ª…97Y‹(A¤AÂŒ~_ß3‡’# Œbª´ÂŒêð½ÄŽÉ.)ª5ÿ&E±>€¹ãRˆ à°c^¦ùÃrñG¤2o¨çÇÞÔˆ¤Jx¬çKpÀi˜èô8‹/HÖ²•Áá×èûÝPÉ'¨P.R/¤/mzýØ·L&T’%“Ê‹ÆD#k ÛAõ]<'I ÕÛ Ù°Â°`Ážu^2È–k…¯{Ù[;'@ßE­è3Îi_o`;WMaê&™Ó’çkŒraÌ¢æWŠ0À°EОÊ\ÀË[™N§8úÐ4•‰¢ââÌ P—:^ºY)ÒþWåͲ8¤¶Cõ»û “5݃¡¥®“&ç haâêê+ö®ªŸÆŒðø²Ûàd¦Oؾèç]¼pýšU¾Ôí%Ç9ílÇ ŒC+ ËC—ÑzÊ™¿r'Çí=ž&‹²Øh'ø èUÂLùô8ŽºÙ‘kKOäË”Q¾¾öB=Ë i79a†{²úƒ®ãš/¬§‰õ Có…Râ&æãüÔù6!0‘|ßZY/E¬¤Ðãëú·áF „h-%åJŒ[$`…)¨µ jÑîÐbìÀ*pn¸?õ¦aú<4›:[mU3zŠ /XïÂ?ž…_ÙB…öÙ…Œâ«ÔûˆÅ[Š…¡™nÊ+N}þ…ƵÑ4ò=öU°jÍõq˜ë¡×^ ê®…ù`6¿÷Ì+Þltí¯ÝS=þ¨o¡ëOVŠ”PnДa=Wô¡h•[tž8 12’¨‹ f•÷Rh­^šq˜yod‰wݽ45Þäao5¼ÐöLº=ØnnþUCY•â-¬à¡*ݦc„Ð+Óµ #IÂ'SÈõ«l™0Êr vT­Ñ  áä[_ ª”¬[,»L‘¬lq•E…qý(XV Ìb/X„˜N’˜ƒTŽqØü%É’$üE ‘üLO—{*ófÄ&‚søš‰Ê[EùüÃŽ(># VÙ†n¿æô ÏÒà :/ÖL:tSËÒ5é±kå&)îeð“.ãZôL42Xó£\¦ñ‚Kt|üt²kç·\M ¥š>¿.{ï@x)±|D¨"ú'j™ò2ð÷¼ˆ®½¦Jè[âÐ[[æ%_ÅaÔ×éh»¹ ùb^®¾˜+ö±C¾…q÷Ê;† €MOÔþ oìëÕ ýu}ꀱN‡>¶)M´ÔÜO&†øjÇ+gj·%LøZ(žT»ŽÿÃÈ…;„¨ª}U®Tf÷N°eúrŸ–‡G ÀUìCP‚|¦r)Í`Â…$ÆD'Ã)èwmá5 »uG¿ªýlVT¸ tÐýð*Sà²3„Yk~¡Ø¤²õ&­²¥„Àöކ‘Ü=dÇQxJÍBÛ2êÚH˜RG·Ò·ápºÖuiÜ \¿ÖŒã_üšß×üX©›zTK)ûãê^› [ø!-÷‡ÙÓ2¿7ô”>º•nÏ)‰¹ôBöQÒW5Ø£%‚ øÊeK¨*ßÕa$÷÷luúŠr¾Y\ŠkûÓ1©ÔV#¢‘O)å‚€/G-¾ QDô×ß“ltºùa‚_4NGµƒ˜Äµô{ÈÜ=ÿ5Œ“©ÉêN~±²<‡1(íi²jRÞË»bƒ¯˜ÉrŸLœa­…Ôu^ËaÜ@Âw,.ú¤sLoŒ»öâ2A&{çÀ¶÷6Yáßà ò‘ß ß\)¦o–G ËŠ‹jk‰Z,zgk ÆoãlK‘}äF Chüò1‘NjÞ ’®¶™'eåþM{Ù/˜/iìÞc‘…̱Ú?óÊg ˜èùkÈ‹·~È>óÇÆåïZòÌF’­ü;ð J6b”_HwoÕ¨6± ²ñ üiù¿¹äA endstream endobj 928 0 obj << /Length 2721 /Filter /FlateDecode >> stream xÚYKo举ϯ0r’w‡Ô£Õ=y7“Ù ¼ƒÅÄ{29ÐÛMX-õRÒxçß§^”([ž, Xd±H«Š_U±õ•‚?}uPWe–mùþª:¿SDõWÜøüá¾ 0n"ÎïßýõEq¥Õö úêþ/u__ý'¹½\®7é>±míþ¸ÞdY–Üþ¿>ý†<ùðþÓûÏ·wLýõ·ï>þÄmh¼ÿô¯÷×½Óyšì×ÿ½ÿç»÷÷“@EšþIÉ‘óÿˆ®õÛW»}¾ÕYÎò×ÛëÍn§’;wvƒk¯7y‘&ÃÉrcì©‘%ÇÎ3å2>4®rÃ5ú[ yVB×ÛžIÝ‘¿­9/IY³mÛw>e]3§™xœå•\ä)b£³­.Xð³¬w¦ùU Ë ãF[Uà»ÛêýŽY­œñï¶j\K‡Lûdèð{H½iñ4w½{:ÏJÙ—‰kç¶š_”Î+3¸®e:|#3b×À(Æ~½¯3ábeiIØè · ‘¿áì+-é`È`fƒÅ‘´c?!¶'4ñDMÄcd's¹P¤DbÇ `z‰Ð[nOfÃikwcB[ »PhTpÁÞÏ' Y8Ä6Êhå¶ÚIÜå‰M`F¡—>!š»Ž—+F33×1”pÌ¥PŒL”•¨EŒ&& ¬ì'´Äް3`á9@¾ì±òBrhˆS}#‹-±)ãjBÑ'lj [}HPsOÉ0 0õ™v†åÏŽR_Å1¿ñq‘‹Ö/ù¸e8. ¸¶tâÎÕèå—0D^E<Øóà¤`'޵À‰õŸìzA×q_ʰS<±fh^½›æ8Xÿ"¨W`ùú_$w¿tÞÆ0NŸï§ªsl ÄÞñöœ½­墫Fôqê/µÎ™±æ º†.96|Žý–yÆñÍZ«Ž äɼÐFC¢WN 6’ó¹ˆÃÙTóº±MaüA¶ùÁ™ö„>Ùµ©§¢øù[¼ÊGÅ~(šïEîÁ…µg—Ã㘹 [/Š{9f%£á8‹SÑ)ƒLsÄP];zFÂÎ+ ó|Í©¨Nž|Ôäªx]è|è -Æ¡²I.=¾—Dp®¡º¢äµP¡BSK4‡ð…~Êz\Bª$Sü. †+R,¢j“ ÌËÀ&ÔåkyõZ½ÈºP5©¨|z2ðL]Ds•NáTÉ#…:¥4a™¸T’¥Ñ¬(wP×U:õH˜”¯î‹H/¹æ ó }˜=N2Ø—ÏIHó:Âu½—lyùJŽý#ªý;“‰±#gÆÉ’½qÎÞJHá± æ­n±'QC͹慜‘[ÊòÓ(ͪ¹ÏQ'Õ’ò¦ú ,‘µ0öäÑ뎢qò4ú}4 À—¦4•‡\ZfR¥lmŸ×$¬—ÉO-‹Œ«7güèÝ#Îβ)—úNñpâá¶ÂôÜ´¡°üÄ/¹ü"2ÀcxPø™Õ!4Ôž?‘cü™²C§ü슫m®•¤æ"¥!_%eƒÎ&‡ÉfÃŽ“Bßtx.¢É¼HöBóz®òü(s O èâÊAËïN:{ä)_ö2Ð_[AÎo<¾ÔTPð%%¿ûðËßA¿.˜pLðöIfðƒ`¢w˜ª>ò̾k¨Ž¥ÅúhQõòôiÉž²ÿŠ«òR÷KÜßúÍÐm¦>C(üi`Z•j}r-˜Äoj©`0L¡€{ô³Ä…3.Á3ƶT ¶ð;ÈrÃ5{è6ü0ú?\Šý+ endstream endobj 932 0 obj << /Length 2830 /Filter /FlateDecode >> stream xÚË’Û¸ñšËRU–—Dêè$ë=MQ–$üz© bŸ4 +‹r‘íQGw(QnIúÈEP² ^Ÿí ÷Ÿš&+70(™ÂëGQDúA`Ã_’ a9lól—•Àj¿«Ä^@7ÛÃ!M>Ì“àn-/e~|Sàà7ü++ôè&«šq¿¨V_µäâäÌ?6-R\6Û2Ï“IŠGA28i ±aY¾2¬ñ¨CRF`$å²Ä÷¦6>“°ñlúþ5P)ÍÝÍ^½HsEô'kàÞeæ7ËP?ôYMÏ3^k¬Ã3ls·ó(ØÌÕŒxìÆ.y‡fâQ|ÏbŸ¸ùLlŸüOµBàw!X9v°‡ía_&ÿÞÔË<-’Æ*IáÀ*w¥#‚Éêç^Ð'´~ŽhŸÆ¶¤"eŠV0\{MKTÞªp §²¯4‰&/zºðê7ç¾;¶GE õœZY’Oànå¥õä7ø^Ò±ãyd ~›…nA^’é¾ç…'e-ß (E-'kz ='9ƒ±çfÔ¿6Ä$Kà™öYŽŽcå)àñÜ$\³2æà!`$çyvã>ôÑYåà ÉW„T€´è«î`K$¸|”%Ñ‘îÖÊž}Lçv+oð´ý¬ZÜÊ ä²šÜ Lß(â¼â2 (ÖÜãÝp–D „áý+",zEt¥y–¨àHèT O¼fׇËÐtV„±Â4K^.¸"Mcg€ áÚ0•R<£‹’<1Yn ³¦ww<+r0ys)†X†ˆ¯q¼–Î_f.¬×.ƒDyU,BøÁ övŽžz _Ø{‚rC.MÇOÚš¹Ð9góØ)¡Yv¶ê«6³ çh 9¹^Páê}ríçUo„R-êÄbǨ_QÔ‡”#W-IŒ!ÓÙ8~®BtX>ø‹±‘»ê$bUÉ¿ ¢¶Š‰yQåÝh%ÌDc‚ù!äöÖ24ë+ ó=C"³Äâ;N%ÈÛ1FOüõˆ–Ìg5Å¥¸I„@ÔuflÈ'ã\}J³ÂØÉ­zÈàæ‹cš ×`˜pö=xQ+4¤ HV“Ól9-E ÞÒêÈ„åèíꛂˆàY‘ØctHñd}ÈcÉ[àŠU‡ÙÀ%v "0 QC6@-v³Ä7Œ°7µ¤m€R߈L”ì¥U”ˆj‘ LX&©—I-2Aƒ¾±T†”çh K,G.¾ä.Ø»+Iþ&RM!­!_ÖXJ‡a~ZŽM~È‚‰´>'{P±Êo… ó[¡ È+Gymĵå^dtΚsGÊcå^@9轆È5­æG= |À˜ó)ݧzlû¹“R§Dq"¦µÆ¹mÛ7zˆÂ"Ìì +Âja(«{:Ù‹›õ[d‚ë{%‘ fœ>ÑŽ^©©@‚“³\;¿ìHz >Û×+OC¹¢Q} ‰ðÌÎ+pZ}¿` š©â|—É#§‰k‚bÒíÇEûìèC4øÙxßaM¥,{„¥J+¸$N˜ ° ]ry=­T"(e¹,ø™ÔzúÃìþ&àGÊÅB²¤Ÿ!å¶Œ¡ÜkO§+U‚/¦'eÅ1EfZ2c-t4ûW%\f4C$åÆ!;…b'”ªíY†+ïí%º-ªš…XÉà+ •„ D޽@‘ˆ Oùm`qâë"ð¹qªÃz¸N±îdd~ˆNgÇ8q2ã´@±hØÛgq†¤ŽéZ8 þ) WÞ„—Hª†Áõq=Ãæúøn1ñ0åÝ«†L–Á× -² Ê=ò„j¢cÜž¬RÌ)öˆx¤ßiFùŠì(¥ V¼5‚ï<5‚â·£•drdøÒ* xSàÍ™¡W¡¤8¼èddònèÜÙ¤‚î¦_œ†ÒáZ¢ðÝ3DÜtÏ8ãé|©ºgQ V‰ÄZRˆ–”âÌ|]‰‘U°ÎX{¤7B ¿W†M²¾—¦¿8eršÔ™£F¢P&“°³Š;(ìM<X(:²ä‘!¤ÔYœéÁD}ƒBÓ9Þ ˜«`Œ§ûdxÉaÕ zò ÞóÓ]¢ß.ÄG¡àÁ×©Ñ z„svBJQ¤456r°5¨xÒðçFÛ`Ž…›½í¡“ï(\üòº¾ùYìšO3œ[\-6xZŸi¬åI&K× OÝÄ\îÀÀóu³b^'¿øž©A^”X™`I þü‰œ:“á;Ÿ"™QÅwÚ%?ÆÄùR„Éîˆi—¶@ÕPÑzÃf(mÏ9mrC¿A‘¦tuø‚"qÞ1EŠVûÎðǚìøì d»R§ÄrDð¹Ñ£›îìx¹ˆrÕ—c«²ŒkØ2Í¢ß*þM+ú2]ûM!½ýMøç‘ Þµ—ÕVõ¯Ò÷Ω,ˆXÞxï4xob&Uv™JZ€Ë¨µj’wM­¼\šZqk˜7µTK™mûÂ|Õ=Tɺož{Nzsò}aïQhWA’IÃ7t@¹µõõiƒ¢¸;NÜÏ`ž Vù<Ë~·Ak÷ùÿI@Èaô“æüL2Xªú¬™Ï—[[ŸŸAìý«Þ^\öÕ×bh…Ê_·x‰*4l„‚îWK üíÎ…_LR¶:zy¼ƒ¢nÙ1VN áÚob”Ò¼bÐ?fÜÚ@TÛÌÜWó)¼é}b;•Q¡ýy”Ô-ål™Êœ8ã ÿ ó|} endstream endobj 936 0 obj << /Length 2858 /Filter /FlateDecode >> stream xÚ]oܸñ=¿Â¸—“¯+JZiÕ·\‘ ÒæÒ ç(z} %®—ˆ>ö()‰ûë;_”¨]ùZ°ÈápÈùΪ›þÔMßiz_f‡›ª}Ô=ÝðàÓÛWJðv€¸ 0zxõ§Ÿ÷ûß—q©nŽ!©‡úæ_Ñëóùv—"ÓÕöûí.MÓèõŸùûöÃgdÑÛ7Þ|zýž¡?ÿôþÝ_x ƒ7~}s»S¹Ê’¨T·ÿ~øë«7ó…öIòÞ1ÿÇÕ•R÷ùM~ÈîUšñíõ-\ýëí~iÛèÇÆÜÁÅ’<ê~³è·x'ðOñT;§»'Ó±çomÎÎ~EB²ð|›Q?¹Á4G†ôòO‚ò(23¿Å*_@:ëÑtH—öQc+Ó ²xôWOv@±v*½W{æì¬Ýh«©ÑˆVäÑ7$Ô»/ÈàA02˜ ƒ0ÉvÅÏ>ju×ÙWõÝ`‡à~x„O+QÁ|bÑÎCT÷ˆñ­FgtËkÎTölý½îowy Bûø[ÇØ¶{jž=nó Ó¶îÚÝ![YŠêIO<9i4†Ù:¢«qÒ ¿È!©Ÿdy<éÅŸí£ÇidëšKø-"ÁhfQáF¹lU-w@Z×fSõì|_9Ð @â™: hF8+É@ð«ùSõ Ò=ß²—)25\]n…³•à8¡Êp€¦_b˜I/÷r¦f`x™Ãöe@BÈÜ'…ûl(ŽýbjjoòG„TDú@GéLà1ð‚Þ ÄÖ^8Ì…EgÆ Âˆ‹M;ö¤b†„»XZ¬ÀV°àôºÁY;ÄV 15ó¾#˜áezàØ­ïg"å}‘äLäÝM)-£3„±IÏ®•Š7¥–GÊbG8˜YgªÑöÃ%ÀH3€®d4B˜t€ÍÔ €Z±î;^•ˆ:$¶Á@ íÚY]It¹þ¬Ÿ@ yÄÝϲꀠSMŽ` }ôü¯»Jöö$—2%ž÷ewIjuK~'ð'·ÈÈh†®¼æ>н¤eH™CßQ4…¯Äˆ„3€xîfìWqþéʯ(~¼|a€žÆSïìÂý­Œä"“DŸ eÊâÞô·¶'»¬íT”{RT²Y‡)^ÓüΤ$lE^W«x­êϸÍ;21â—¢ÄC­ÄÄLÇ ó¶0Ÿà|Î'8™]'‹&¯mÐìk ¾¾ÕŽuC¹ü³ ¼ÏÂ:/¯Ó/’‚SŸÒlCwô¼ ÁNNð¡Rh=êÁŸÍ˜Ed:nƒ×,&ô¤Ð@c¤YX'nˆÙ³¶Cålk;=öîùA82‚y^³ï‘‰Â´ë…ªíªfª…*† 1Xœ8 ÖwÕ`Dƒ'Œr‡Y4@Þí¶ìPS•“@öz²´5ÉÅ5p`¾WÙAfäùˆNöš3»ø»­-2².Äì.u}·»$æQ=@ˆrr Q.Ó´\ßÙ§ÓlYáGv ADÄãmf“e/¢ ,Ñy:¤F #Õ”D¤£b墦€BЇP˜°Ú`ÃEܤEí—Ö–zí*Ùb*G}ª"ˆûªÆçUP|×Ç)ù®v}•I(Ii!üºš!Lù‚) ¢½Ë…ùv~›Üåq‚´fY¥mè œatª9ŸàkC¤£ˆkàëŽÁ^èÆ'[á≧K5“V 2ú™•Ñ.õo*o“Ô¿%(h0Ÿ´aá¦s(È$¤/ÙÅ,ˆiÈuPn¢`!«µ‹$¼µ°0HІñ°œ(‰]€àÅ‚('K¡4zZí>\k²ðšœí}¸{1•EÄHÏáÛÄ+º(‚lŠ/“ì «Ç¢,땳lϯó¼É¤~ÅÙÑõ-ïÞñ³C3pR7_|ëçØœa7¾óôòÎó/»UѶzÂU˜l{ŒùÂu!2É×LÍQ6`ê°0u‘Õñ¿àÍeØÂðò$…x¸¡)ˆút™Lác´6G%h McÈ)¶Xs=³HžKPøH·¼ŒŽà¬¤„nuF™>)}AAÞ¡ôk¯nU^>~¶ÊLn¹¨è£ë!íµw«N ¤ƒŽßgÒ4ZžX*ì(£Ûs¹‰Ék¶ê9}õT¿ej¾:YÜ8ÔØÚ¬=†èl¶óétÆs »Î×'ØØ^(6ËyYÄ™nw¢—†Fê%ó™"•Lñy®&¤Ëˆ}Ët<¹~z’çˆæOg|g§XÚ°¢#Ä-Ï›9p-V¨Çù -Ûaâ·ÏÇL‚ã'1Ç·wÿéš]oÕGöeËeèÃ_ßÿ Æ_Ö endstream endobj 940 0 obj << /Length 2597 /Filter /FlateDecode >> stream xÚY[s£:~Ÿ_‘:/Kª2øöèØrÌ|ÏLjgˆÁ1U6xÏlö×oßÀØÃ9»•ª¨ÕjµZÝ­¯‘¬îLøSwóndY½‰=¾Û?™Ä-Þï˜ðŸ?)‘{ÁÇ–äSøéób0¸SfobNÔ]¸k« 㻓þý?ÿßYãIo<š€âþ뜜“4{DZO:lôûÿ§%(ù?LQJõ†wñÝS–Íë†ûäþÑÅýØ2ŠDzA¾«îûcã'þ‹Š¶L~Îâ¨JóŒyÇE>¸s:¿ÒrÏ"ù‘–IÌ(‹?çÓYò“‰85)JPV2'ßq[Õf=»r¸YY=5`«Ÿ“,)¢ˆ ûÆÝ2½J·IV&ÜÙù‘©*=Ï2ªüÂéÝ?,ÓÎÛûþÈØóÄqÀù™dÉ·ûGäN™ÓCTp'Í„yJ‹´º2]±ídeÉ-Û8I™d¸ZÅ#­•Xäí,Co7¾WFúÝTÖý£y–  “*J²T΢8†µJfòF8ùÛ!9–,“‹žmžm“"+{ÍF½þDrXG[´]6·íeFŠº&#ã=ýžM2îF<§e™~†DÁ„§!–kTŒ òÇùˆlt6B¸†ÖØpv,Áþ}ë"/¢#wÊKoÑ1vR2·ÚG±@‹¬‘g‘ã†]+S[£›ƒÒÕªÓ˜®Ä¹d(p› …K†ÂÀw8‡ìpðNÖ„vh¢*)~Yô·Î=œN‡”6:r¤¡M«ÎÜŸ™»§ìa_‹ü^ˆü$Gz ‡Ú]~8ä„§¶<˜G3@ÃcæAÊÄi%çúI âŵÎ_"Á›hœ>®Ï;}dÝ8ä°QŸUBÿâ8èÔŽëš(èÄŠñ_¦ñ¾€`„ƒ•СbÉŽ {†½®ØP®ª¨WÃV®7Îy«%eyÅ|Êá1æð"¸Þ‘v¹%É7ªŽ081U;1Û$¦jó¡k—,„haÀáo$ç´æˆŒj‰›Cc‰p}ZAî[ ßäTYíÚ½ŽÚ cwE£…Z Û’h ÑD;¯×ÈÁ²¯DEÜZâºÿþàîöJD cÑûsŸÖ%»;@oeœ ½­z(ßv[õÔ/eOµÊžÙ.{ŠMB¢U¥Lã ¥˜0AÐ$šÍü­ZëUFYÁq:^а(³ ¶ÛäTEP$Ú|ÜÔaø/9 (]£,¡dA$îѹÚçEúŸD*ÕUöÕå³3ñdg v³¢`VÜÔ]‰~gª¬F&Åo'£Û‚Iûû§.xìrºØÅ/¦rÉIV.+ÄTÄñ?S²±8¦%­FÕÏ2–9z‹R¿>GU[Á‡KÞYâ¸Y³?œPêÓ÷H@º?2ùáHz<ÕÎŒE6‘`‘ÉÁáj·ÍO|à•Q¤ï{Ž'ìóCœˆTT¯ÈÝà ن¯Dߎ‡>PC~.º6tw.L­OœKÍ(⦩§W™Á¡쫞²¯ã¯èoHçyZn|,JöpÅ·¯7QQD3Ú>°Xe[ãD>´—Ú×ðÁ©à &àÖõ°€.ñ›úþÔ Ñ%¯<¼@͞ϘÎÄÚǵ¼gúò CÞˆþjÔ„º×à^í?vyòÅ C=G1Ëxzåvº^¯œÙôiEªlc5Û”ñµÇÃúÚ4Óëû_—ÚeÊÃý±¬hæ!âöÿ5 9nGõÿê;¡ã>cY5yÖH3oýê;ÏËùKo5×~À©;ÿŒ®A9¶H~ƒ‰Êæƒ1õimGË,ñîá‹3×]NáÕ¥QvÌ~¾|«Mt‚ߘøê„Ko²DGQÆ[p;u…ñ»ãÎxŠvÈoÄÖß:ôöu û,Øíy<0œˆ“&-ÀuÜÙj3>ðèY®2gå@´k%¡'óx³u]¡¡˜òžÈvߤaû¢ÉI³%nCý䬜ð•!DLcá„.l¹MR“7kš+±šmV@vùa㯽@÷°BNØt$ Óë«öAdk”Àœ`êÕÛôx,€,Yͯ4ôoRì ü™¹^èÙcG`Bç‹~@¸´q&¦A°yÑLÓ*HÌ<8‡DáHlµbÂÕ3 {þ•Yœâ/ÎŒó ™¾æãäø¢¨3@3Ï÷õ,t<·WÕPpu—æª~Fháê*ÞR, é_ajýAçb` ÅV!ÜCrã®(çöõÈ‘9÷ê°mCök¨ã¦(Ia0ž}]Ïe©S7@f›P"ô3RtòmÓjCòÒ¸C‡¢-ÌJ¼æ„@\_EûÒëuoî,ð†Ö&‡¸¶ûE¿Êç ×9ˆSDŽD] ˆýäa<(ç°ÿ¤;rrå°;ÙÐQˆj”œÈhN>væØ™¾°wu hØàØ`­Z»ÚŸ®D*€ôXë™Ó0·8gñ‚KË–Õ¡WõÐÅ \.`æ…­ÁɪH,¸e± ˆ˜üɹpܱr¹¶y1–B4±Àâñ@æws`¶üBÅz² ‚wä4ð. t„Æ †"2%;&Ð¥ÃÍxãI EèÛ:NÓž4{H_»¾”!.Es6ÛøRòe=Ÿ[´@‹ Á&è /丨Óé¬bKI„hÃ¥ã‹Lûlp…jäFTa†øpI•ÙYm¨T G´Ï“\†×%¿Ë8ÊhpË­ð’Œí×gÉ–Ö‚©˜XÅ”³{íf&jD“ßÍúWÅó•YKª~@àÑw E/õ‰<òÁЮ^UÉt¹²>4~0—ìÕv@?ª¯\´H÷cë1/ñ)ÅÛ\2Qv@­¼B¤G¸¥•Âͤ}+óùÂws pió€„ôxcd'iO¤BÞD Y©(ÞæYÆY&ªÓjßqÒ䇈æµà¯îçìÀéczB_Š_ÀÆò¤Ž×Ų<ëwVäïXX ™Óž…!<ž¢Œßv‘ÁÒtÙ7ºE‰×õÝÜ<96¿ØñꌯœY}k.®®Ë»$éÕ¿Dý±cÄü endstream endobj 947 0 obj << /Length 2504 /Filter /FlateDecode >> stream xÚ½Y_oÛ8ï§úRˆQ’ÿ¨}r³n׋¬$Áõ€UdÚ"*K%×õ·¿ÎP’åšÅ‡9gÈáÌqáÁŸ¸ˆ¼‹I¸Q8½Hvïâ’E>V^{jZ®UUkõ¼¯y¢Çfç[IjÒÖRS¯f/ƒ U£‡¹F8~† g ‘œÕ`8h£8kþVÅ%6FN\×q£? ÐFû¡³)²¬0æª|KcyQ«·Þ0'ë\î`†ÂYÔD5› âªxcœ¢;µgíqw…£YÃÆ®ÎþTu¬Ab(„ñÂPxŽDy”‡=ã$à×Âщ$Æož3nã"øÝ‹‘0ȤVtˆx¡‘ Õ’Dk ëÏ$ÛW N¸£€°¾¡íB§üCöº½T’5êž?›—ûlM'œ÷nÜ8À½£o&c³­äDûÁ.€‹kµM*ï‰)S¹•³ð˜FJs³ Eš7nVÓ!•Úº[ʹÙg‘È3¨mNG‹}¾v)–A(žºÑxb(ó§îÔX²¥ª4g$å°…Ëâw«~XJÊ ö³uóxÇÆ ӠϳVrCMµ–L,˜rHqÍ×…¬XÝ@tÔÅSñÜpÌ^w]”fSyÖ7oä]Ãè1t<‚ðíƒ3ñ(c}®²Õ&Þ×i¡{²Œ¡©ÀgV&„uö‚ a"E,laÄ:@¤úHÝ#Æxl˜X„ÓXÔÝ ØÌ«‚õÝkµ[tl¼´³v¶ÔgGUSêëZÚŒœ`2—:ΨsgRµoÀ¥òÊ®µªTòQ?¿¦V³Î—f7x7˜Žî×pƒ/‰ Ìa ~HMw;Á+°~<Ýn:(ÞÕ£ÕÑ$}Ã^âÒÆqx¿|âúL ×Jú>Ð+o”ÊÏ´O‹²¹YçWá 2>gæ¤ ·M±}ÆýµXý~û¸"žÙò‰ÍîïgËÕÓ'+<}ÏëÈò\-µ+3e•>˜HZ›èYõÏùýõï°Àìóâf±z:=Œ/‹ÕrþðÀÛ{Ö}mv¿Z\?Þ̘|÷xwû0‡&à ){\¶Gƒ·9ð¦½MÖײŽUVõžï“½«6 ˜3‹m4Ô2‘OÄüãÿ|Ûz Œ³!€=>+úÌí¾-xmÈ ì/•”çß&îx2¹½Ð §Á/`¾åvØ Ô?‰•ç2îi]—¯®‡ƒ»Í÷n¡·WYZ]+úLoTÊrÿw¥Îe¥Ü>„ÀÇ“Sð6Ë*ÎÀñzM‰UåŒ ½3Ñ‹hô @í4w'åô8aÐ@àtOg‹œ¡-1eZ…“ÔÚ Xt”× †2æçŸ¦þܸñbÔ>l_)Ç?°S"ãp…}„£ 籋ùBåè8«A" 7…é@„]”3¥Ã3d_—{nÇô‹ƒð¹xäLµ(?²¯à€“óºuæì@ΊqNnw¥é·êþ°kÃŽŒ\C~²áü%À½GS 'þÏ8Dx;ŸÆ…WrPRìdu.fŸnoWóŽÐËÛÞôÐDIŽkŽ6Wý]¥ÅÅpûâU«×ëèò 36ب™¡%§x´0uU :`(‘,ÉíÖäk…Î\}ziYcVò¡3úÃøÎÔœL{ïVöµl ÿ‘áp áÐíã)íÀz~ÿÍ¢Ç]Ñ"®?m<Ž4>Eßõ'eþÐ>m__ ðÜ@/å'¯Ê÷Ïä7$jÛà‡¯z»q ÞYjÛçvÉwš )†þH¸^trÕù•#ÚŒ^“1q€3¦yðÎ톨 @< ±Ã•M½ÎËe%æyjNœº"ž}¯Q·©µà„µ2ïS âIý‰XŒ—`#î+"|}\´ái‚á “GlÖ&-ƒ¶þCgkrƒ}yî«æ¹HÑ —1Ua ŽCwQÌÏ÷/ ì•O¦ËLD{pð…ÉqÐÚÊš†m†‚tA#paA™ †&6ŒzjC­Ð1ïðBç*b©Ëç°“šð7Ò –XÑÛœBvˆ7˜ú­!¸.vDC̈)"¼š,Ô÷l41뎦ýïr
’d±•Þ/*ŒB£-Þã4j@°ªbmtW‰±óÅl4Ï'¸‰"7t@ÃhâØ/&ÁÞª[“ð{aEÌ%϶–`ªFpfxRçpR.èV†ïnØóz!¢ n¾À)Á,ó°å¦êõi˜9ùÏqá4t§bò6•,ó •N‚ٙȂM“ÈB =­á™ºÓ4¢M4 –°cö›Wv Àš€…]BÔ°øm§˜ ò¤Ðœ(4ø~¤·ÌL³yž¦.^¯ÐQà…ä¥ÑO¢ææA&Ž}ŸðatÃdËDCž1¦nµÖv¨ˆäL=kv~p©Ð›tÂ@„ÀÔ‚ÛÈÀàJQýfäˆ,x?z|Ÿ^¼ÀR¥0½Ó]ÃL!>þNÒPœ 3ðŽ@Î5)ŸX©)W‡ ÆÌ'ã1íMèY„ <öK¥+kq¸—~)´¥)áÒ Ê Ä³QHlò 4ù™¬£™:o^Õ2^ÓÂI¬¸ZÜÍ•žó³w.c TWõ%K¬iöUD5.pv7øÂ1öÜQô«ÿYîa‡½'`œ }-b”©ÊŠª(ÓãÕ!=áv ³m™¹i½Ë^ĵ)b|ÿŠZî—Šžb¢3¡mÁ¥ÿ±Å4 endstream endobj 953 0 obj << /Length 49 /Filter /FlateDecode >> stream xÚ3T0BCKscc=K …ä\.°hQº„äÎeUgbl¤±*OS endstream endobj 1099 0 obj << /Length 5600 /Filter /FlateDecode >> stream xÚíK“7rÇïúsì‰Ø† ÏB9B‘ÒÊk/í c/¶==M²­™îqw–ÜOo ð(ª2+I­DrF¡ƒøHæo ÿ2Büªqÿñ«®¹j¥d²WÛûošþOOo¯Â/þóÇox´[;Ãuaùâõ7ÿôG­¯xú¦ãW¯ß\iΙÿe²z}{õ_«N_ÿÏëýæ‡×Ù“‚ˆô–fk®xË×Ê3ÝOe¬b\ª€{yÇŸ; µc+QÕÌaµË†—T›FÎj#d§¶vvÄ~¸/Nì~ì½¹vnVÇÇÃíy¦g·Ìþ,zvl#¢Ôƒ5¨tÙèìÖ4lҹŽó±í˜–ΣQL»¿éÁ/Hùøfs·qÿ6DDì²ý Ÿ£ã𝿄7û»¯!B ÝuøîÈÂæ°òÑ&H&p"9k}—^~eùê/AÀÃÎ)w¹võ7ŸÐ§Ÿ¦"º€±â‰õòêú±é¨!0˜Ã!Pª¡0häÙ‡€p¿åqȹٟ.ïÖ·»Íå].²ûμÝC-V/çkl.YÛÚ/, íâ3SµÌaíÊf°v4rÖ!{í¸eÂZºvß»†Y½v’°k¿ã“SÌaËÆäp³‚Ù+Øøb)vù›»(˜tÚÞ†ÑøÿwN²]þƒÃîâ-þæèÙ±™»ÊÎMÓ?»”u¶Âÿˆù¡š0Z¯ ó©x•Ë0tÚiØÆ­ ’£5N®\öä?€ñJ§xEÁc—á‘;0^iä¯ÙÅ«òv*e‹Xç¹àt¸SL&qi9kuûÕ @§V pað¨a„˜HNŒ’+—xSÁ1€qðØåÂd‡HNŒ‘}[ã¦0 àr^#üÆýýýÜ(+\Éc¾ÔåˆXñ©±:˜Ã±Z¶¡Ñ`¬ÒÈ9V1rår!V‰à«(xìravF$çXEÈ>V[ÍÚN#±º=Þ?„??ïý”m7»Îj;ý,VcR{QuÌaÝK L êN#gݲ×ÝhæÑýíî­½:½…z«o©¨zæ°ÞeÓ êM#g½²×[+†Êý—3kì–YÙ>ƒõ—O ŒÐ Ô¸ÈÖpX !£ ›ƒbŒ]–U‚3iâ²ìKÒ²ìöîxNÅ˽Ÿ&>Þ¹Züns>‡%€~òˆ-ìñÆýBþ–‘U·§¶Œs÷ôaZ\ëŒÖëÂ|*dåª9MˤÔTr´ÆÉ•K tI¥ œ«5 \¹„J—TZÑȹZÃȕ˅jN½].õW9wX„ìFqÙ×oÌ´ú× KÎ4ì+Ìþ›Z„Ø s°ÿŽYµPÿ%’SÿEÉ•K¼ÿÁ©ÿ¢àÊ%4dÅÎF$§þ‹’+—xÿ¥‚cÿÅÁc— U‘œú/Föý׺¢¼”þ›–ºæv¼l›»çýÜkOÍ]³þ£;9¤J|ª*ƒ9¬JÙ@ðž"9«‚½*nªÔ´ÝG¨òß W‡}C¬¶›‡ÍvßÛ}˜‘DHöÛ,à@ãE|<êx1˜ÃãEÙbðR8‘œÇ Œ\¹\/ˆà™(xìra)œHΑ‰}dÉ´U™¹¸‹ƒE_—ïæÆ a™!õÓªÆÍ+Dþùž6Z¯ ói;W.¡vVë„%“ƒõyì-­™Ö­qpå²ë麼q“¸VSÉÑ'W.¡‚ÃÍýCGk\¹ <ç[¿'”_ÑzóxŸ¾4535\s8\Jå.9‡ BöáÒtù‹¸Ãúíi=qécŠÖÍÌÓ| )ZŒ*|¶†u/$@F 6«cè¢ë˜3Mªn÷þ»ÖÍ](úó˜×3u†½úÎý†Ï½²í˜TöË @ÅÔD sPÇQ«Âý—HNJbd/¥õ+u2Kéçr—ýÁÏëg×{¥Y]\çÝßïÂo^mN?õ[·½éÏáÏú-ßï6îßÍ,6L Â\Ï2ilþy–æzÁz]˜ÏÌõÆ.ÃÎøéŠ²hû% "9ZãäÊ%P9Hኹ– ŽÖ8¸ryf¥“3åþšHŽÖ8¹r Íõ ãÊÁÁzT?œöoßùp½L#SvÌšß'­”ú6¶,5:s8óºjì2Ô`8Á)°+9xg™NÇ]ÝîÏÛÓ.mç¼ô«hýÉrý*ZçWѬ_EëwKø_«hÜ=O«–WÑBO?±0(ÌÁÂ`ôTœC…‘œ ”\¹Ä *88xì2<²€ "9(¹r‰Dp* Ppå:E$fq"9(¹r‰Tp, pðØexd Dr* Prå/ ˆàT àÊ%tÚfÌâDr* Prå/ ¨àXàà±ËðÈà⑜2Fö™ÀºKÁüÜ“³Æª¯qa²5œ`ŠÆBò ›Ó ‚;\H.4jÊ-uäp)³°9± رÅ´B¢æ¬‚PÇ—r ›S ‚;\H(4jÊ'uäp)›°9™ رÅTB¢æL‚PÇ—ò ›Ó‚;\H"4jÊ!uäp)ƒ°9Œ±³Kî¿´O‡›þ@šXþpx{Þ]¬âî¾—«7ÇÓ}ÿbÿš¯î63s̆Y©žè3‰¨&éGŸæp\D›°æN2‰äÙ—¢c­LAqºÛÞ®_”2ûOµf4vWóç´Ý*5UðÁ¼l{4r!{Áyçò‹ þ2.ùc1—Doõ³R=¶UõÁV½éæ4rV!{ÕW/¦‹&vïÃiY»mXV:âíx½Öíê§Cø¿Ê„Ÿv+´Ë(Ÿñ =¤Z|Zªjƒ9¬ZÙ€‚ƒªÑÈY5„ìTs³Â&í‘ÿÑò9·€jÝgÊÏ€\ñ1‰j Ö Xe»ÍÔαõiØ$U…WXÒýZs~e”bŠ[þ8_bõ–NþÿLÿt¾í6çóæm±Æ{ž=ØL©'¶Ñ¹¾Ÿ‡»)µÕý--ºYêLÉz]˜O"£v ßþ¾"ÕÛƒ}Ht­ î?phIjÇ/Á¶qÝV‹¯bwsnîøðTsXÁ²=§oæziÔ^A„˜ì/‰ýõÍãávs¿ û›ÃNu¹ºß\Nû÷³ýêîi΃²±q¨ æ°Âe{OWz…iÔ^áŠ8?pk^¤ŒEÙÈÀ-ÓÅÃÙ“„«`ë¸zusÒPÎlGîø…9É8 É‹M¤ú°¨‰@Xˆ–µ*†âŸ(a±?v·ÛýMút½þÌ¡?ïùÌÁŸ¦üÅì,¬ÚØ*ÝIë$‘Lñ¥·Éz]˜OÔ­]Ëöþ*âl ùó.:þ©´?¼ÁG%ïÔ3ÌD©a©Ñ1˜ÃÑQj%ºÙè Qû計³Ña„+¨»_ãâiËŸeTÄ¥FÅ`GE©‘˜]å$Rñ¢câlTháæþ-sÙCsf %.””O{¡;µ5s8JA$Ÿ µ„˜CÀh(ã1ÓOGŠ•Ét³Ö5_ÒϾ_Þ ‡¹¤Ís+=¦Oºð‰ÒMoOú–c¢õº0Ÿ.ÇT.e5å½Ð‚JŽÖ8¹r9¿ão?2V‘ÁÁzE¯Æis8ïG[Añ/ïí[ßr+Æg¢ 3˜Ã”ÍC£ö Ä,L닉“ûÝ&îï?í¶þ»»ÓiwØåèL›w²?Ýó«[•ƒDíAu0‡E-›x>穽¨1‹jŒ«,x-j:ÏE¬.ÇxâÍùxzðƒþŽTÌþ7Vå¶ŒOF•g0‡å)K̾Â'R{yb–Ç%#»OøÔÆß\£å— O|2ª<ƒ9,OÙXóû´‰Ô^„˜åQþÿ©tÈòüõÚšÕæî1jô]¼z4-a×çÊ'É+ð$ùV3NÜñ5xüY© >˜Ã ^>¾š]*!RûGˆ¹ÁÝð"¹!5ø‡ópPÿBëºâ\ÿ¢÷ˆÀ|;ý¸ÄùvaηG-0½à+Mމä4ßFÉ•K|¾M§ù6 ®\ûYÓä˜HNóm”\¹ÄçÛTpœoãà±KàâÃ49¦‘ó|#×.ñù6œ \¹ <»ûœH턘RŽ¿h0é[èªc‚û½¾áÄŠÞ_} õdÐÑ‚i©Ÿô§ÍNb)È R…9ÜA¢ ”zR4“ÈCAȵ˅Bç‚+—ÀÍ }¡Qû‚si83éûýû|E¦¿³Ë÷cNcÛ4¬³úÙoPOíG ‚Á‚R`”¤Qû @ˆ)xç÷“·iÏy¼*;\€ZEƒÍ·¥Št¥êÌ÷d®ÉOúxx“~@â{œÂ|3zæiúM/]ˆäô%W.ñ÷8Tp¬+qðØ%0º¤"HNu%J®\âu%œêJ\¹.›LE ‘œêJ”\¹ÄëJ*8¦Md¦›“ƒ9¥>jv¦K¤öQç?éçܸù_üüûßÑã(b‚>O÷›»ýß7ÂÛãá|Ù€›Ú:7ôŸÿÛ}h–å ÍÆò,k0‡gYÑza‘¦D4ržeaäÊåÂ,‹Nã7 »nG̃-‰<Œß¹v¹0~ÓÀ¹·bàÊ%rJý ဠendstream endobj 912 0 obj << /Type /ObjStm /N 100 /First 913 /Length 2201 /Filter /FlateDecode >> stream xÚ½šQo·ÇßïSð1yÎpÈÀÐ4PQ ÛÚ~HÁ6ªê I†ãoßÿìqVJt·°u+½Üòÿp8C÷®§Rè9‡.¡§rA3sÈq­´ãZBÉø>·Pj RàZð^w|O%ˆÐ¦“„ÊŠ÷jÃ÷¤AKŵ‡f\ª¡U|?µ![JÈÉÀ%¡!ø´HÈ9Aº(½oz-T¬OG£A3¬4|¹œ¡Ï %4(äšðƒ¬Œ»Ø†2ÝÕ%(>¥Ôê¦ Êö•p 2 , `N½ ÛGŠ˜o¤†¢“Ÿ4”†‘u7úÔ§Nxé~É*›^s`êè\)0't†»Xà§^Ù|g%°ßk ÜÔ:›;›unA² £ö d#Ô¤ÑOØ<…ኘ3Ο¼­Dm:T‚ts«ÖoXg 5ÛÌh •lê0­µØÜ¶„9ë ·jµ6Ìžb*; [µ îj4™h«A3:š¹JÝ>iA9[ŸT0ã½§ •A†#Tá’Þ)hƒ-½— öÒ;‡o£!¡‘‰vÄHa묡±X皨uFU(ç”RhlÐÊ¡õLö¬I  e¡i”,’H,¸’EPî­ Ó6‰ £…(P‹úd¶´)s2ó*4à»Ín™”²Ú=Ù‚—ºÝ4Ýɩ<™‘M­Z´â¼¨Øk¶{›N‘¿4{E6d¾lž=Ûl_~þp¶?ÿòö|³ýóîòæüòæ#JÈÔç›íóóëÝÇ«7ç×S¾Nýýü×÷¿ü¸û-¼²>Fj§× ®p/$S¿~˜ð?…W}JûçaûÏý;ØÅ·—ãîêíöâý›óËëóëí·æ¨/·¦G†‰j´º“džõ–Êôþ©ÍÉ™#Ù&--¢DÅW`žU—Óû‡šóáÝû‹ÝõîûÏÛOï>¾»xûá"¾»ùßÅ] -4¹~uhnÏPñ•ï õJiƒqfE X?C)›ëI±,å^,KþªX¾3P¡åþÁÀeÓPPÝÛ·ñ™>4Ñd¿°Yù¿¿ê¸¶qÝ;ÕJÿý5ëHÐ:´ò¸^¼:xuðêàéàéàéàéàéàéàéàéàéàéàµÁkƒ×¯ ^¼6x#r¬¾ß_¯ ^¼>x}ðúàõÁëƒ×¯^¼ýlíKúÑÈÞ oo°7ÄÕêæ 'g'g'g'g'g'g'g'g'g'g'““ÉÉädr29™œLN&'““ÉÉÅÉÅÉÅÉÅÉÅÉÅÉÅÉÅÉÅÉÅÉìdv2;™ÌNf'³“ÙÉìdv²8Yœ,N'‹“ÅÉâdq²8Yœ\\\\\\\\\\¬NV'«“ÕÉêdu²:Y¬NV'7'7'7'7'7'7'´;¼ÿnË9º­7ÅÆ‰“;á Ûæ-®j‘ØÄv®y«úËîå.` þ&×£Ûã×if„9š5Ib.ù &óJš©B£ßjfh¦zP³Ð:šÒ¡‰¹Ÿ5ÇÌzP³®4Ná«“kŠÔXšÖ\i>¥ô(åŽ&KÔJ‡ç3­¤‰¸E•u«Y,†úAMZK3×(|gœ(F%öm>u>•¢íþ’$ÚÁœE{’&¹ÄÖø¶­4N×ôq.iöuÆÉ]"ÙãTg*X#Úá¸-ëŒsÖôq.i®4Ÿv`©Ø!|œÜ)V>’Ÿ²Ò8]sŒsQs¥5•£íð³&Æ‹úç°¦®¤Yqú¢Ûùdͱô#ó¹R®à´­:Ÿ5kнèãŒÓN™yú!JZª Ö]F~f­·®éq»¤¹V ¹¦ûvIs%ß–Ž5ã›}›(Š”ÃkŸ®ãÛYÓ}» ¹V0kºo—4WÊ{:b'a×,=cŸéS÷¹oµLóè¾- k‘ºo­ýsÖôq.ižº²=†Ã¸jŽVÆsöˆ¼ÔSGQ‘ÒgÅÊQ±¹,(Ê©ûµ¦ÈX\Q{¬D‹Š'g VœF]ɵ/*ÊJñ*ˆ•Û2¨`YêéˆäJÛ¦Kz´.HÖSOF9G{@Rpb˜N”"…aŠ®H8Ÿ¨‰ÓeÃiÖÄIÁNÛ‹še¥¬tMOË%M^)/]ÓsI³®”™®é©¹ yr ynº¦'ç’æZ»‰ýøA|›žö³Ã#WÒ³¦çç’æZKòRøŽ&Uœ ÷ MIíwOK NÛGŸ–¬4ÎIKîìÔ©âJ3ÎÜ¢ý-ŠæÒ¤(Àöá{¸ʧ–#…(: rެeIðäZÄf¬Î‚XJ¥Á“Ìà°•¦ân/ˆí™¦3çQÁS×Tv}Êÿ½ Ú¼4…´Ò“ ×aº ¸ÒBGZ­d:jöC§>Î&âƒtMå’æZ @•hÿŠ›51ÁõÈ1¨:™8¾Š¶)/ȯEí¶Q—˜zyœ5€6¹Õ,í¿f‹š'/óF·šB‘[[Ôò³M['Ur¯±ÙÙÄS%qléð½œ×I•YÓSeI“ÖI•YÓSeI“×I•YÓSeIs¥Óí¬é©²¤¹Ò¶2kzØ.iêJq‹ýºX-;â6cæ#µìmÜþÇÛS6 endstream endobj 1111 0 obj << /Length 1092 /Filter /FlateDecode >> stream xÚíXÛnÛF}÷WðQ¢ ÷¾›Ç\ESG@Ú<Ð6ë0‘%—’šæï;{¡D‘»ômâæ?X"æsÎÎÌ.-Jø£…- Í9±Â—7g¥¿Ú^áÃù‹3q .zÈÇ˳‡Ï¥,hIlii±ü£jyUü6³jþfùSÁ%F[ˆâ¯þ¹¯÷u³¾v÷Ξ-’1ä“8äèQ´*¨ \(æ(%·…2‚hÉñ/ŽñásVb•V¡ …P”Ôæv¾`vVÏél=_pÁgëz7‡+æÌÌ6íûÅô¢HIŒ’Ýû=š/¨¦á;ùFï¾w?ÈÁ¤!”B uI ¤rZ’½èÁ½,ýlCút)6bVšp.±Ì=Í<陌ˆ5s¿ÀGô4ñ dxe>b6ŒPðÌ=Í<™ye£‰ëc‰úâÓá•åˆÙjR2´¿"z’êR%áÚ"—òw•ÍnÜ×ýj×Ü®êpårUm·õv¼Ô)ã„ zïk='c|}¬ŒGx^Æ~F%Ëʈc>È8Áìd*²ù4·ÐT‚€<˜¯t¥ú]©sÊÆŒ`•=ÂóÊö“,ʬ²8惲æt_¦Šžz‰jË/a/À ú~}•Wh"¥þÚñg2P©H©5Ú@GxÞ@*¼ÎÇ|0Ð3”i%Q4’†Ê‚Bý®vÍ&ˆ›æï±;#ZñoË™ ¦Kr‚éÁ³ÌIÞev‚A2wÌ$ó äôƒ%Žþž&> ^Yäüdîü=dNH©db…ü5_!¡q:ØWùfè[¤q-ÒúM‹_šÝÛpûbµñKçÒÝwcƒ^ÉKÂîc¹ä†Æb$ºöày#&t@“Ç|x‚Ù0n ·!Z¢ÃiEÓßv ëĉyÂê}„çõî§žg·$HæƒÞæô‚.-±”œ£&žóWqâñKÕÄ¥ I›5kèw‰ ¾ãæÇø“t“€ªëfC¤›zð¬›:L¨6ç&$sç¦!ó©›8|–”žl½Jû ì ®h»óóQÕ~ ¶ºm7Õ©Y5»&µ×µ‚I¿>; Ï)Ì}&œý”TÝu¶Ñ‹|ä€aHŸ jS'šHVÆÆŒå9…îkÄ2«¼$”Åña×ÜÔ‹jõ—«u[]×WÁ[¨+RÏÞmöm›2n¦Ÿ,~’˜ |kû¯-‘Œ*¢™@ v„ç‹ÿøŒ%ñzÁ&\Vƒ\îÄAÓ¡ÄÓ´Ì"Ø—’"¾VŠ#> stream xÚíÜKs¹ð»?öAÈàÉ1Én*9eSº¥ö Q´¬’H*¦âòÇÄ£ƒ–š"uZÔìÕ6ù×vÿj|5øøjVVJ6*·Zo? á§ßïWÇ¿üûïŸx¬»ò…W ò/ןþô«Ö+>°qùêúëJsΦ¿¦ªë»Õ>öËï×ÿüôËu~&-1rª\dZ³â– ®Õ”é+ããRã~ý2ªÏÿÛ­_ö»/WÒêÏÿØÝm~N¿Ãñ¡ŠIeÄôЫ)ãS¤aV‰ãÃÿz,”|åØhLˆˆeþ‘ƒÿSë—íúXé@¡ü¯%ý¯jþüåŠ[~üCÌþ¿ýßþ@¨tg™ó]4~ì’«7„¤ê+P”8—ê)Ãxø¸H-ÄHMŽÕ‹ä™‰§ °¹½kÀÙÀM‡óÖ0*¡ÃT(©gR& %3™e.€pÁ„3…ÈúÛãoK$rdÎØŽüóJQÊqpFÜ¡*hÉÙE•¼1pf­(26?Ÿ]Æ2bC©2J9.ÎHpT-9˨’kzäLhp[ùúüÒ€¡ýÒEwäEGj+Ñ(G}Ì&%惘œ|ÔÉ nð‹ZU|<¾÷+Çû¯©¡T¥—g„ßSˆÉYF•¼aý.ÅfÛ——›.ã ±¡T¥—g$$*ƒ–œeTÉ zdÖ/7íõ†rìOÃ{HÅPÊq p,B hÉC•hÉÙG•¼ða8sBý˜äÌ+Gl(UF)ÇeÀ½rO¡%gUòB†æL`iÚIΔJ•QÊqpFÜ 2hÉYF•¼¡æØíöc’Óo ±‡T ¥ÇÇòʃ–œ1TÉÍc5ø?ÓÚæÚ1ÉfwؼôÝî…w»rôk9K¾ÿ€rVª9ž¿¡ÇôÄä«N®¯2Ò)6êxmÛ|ºÙÝßö•ëÙ+×ÔVªRŽû€“èÊ•˜œ}TÉ V15:ècÝ}œï#¶•꣔ã>à¤^¹~Ð’³*¹yc’J21ÄÓo¯Ü˜4³*î½þ»[?í›»¾Ö}ÿZW Ë”&Ѓr\Q¬ ½7è=19+ª’WnXzUÀÃØÞÜÞô‹Ìù™cW©:r5ŽŒÉ çñ´ØLc»1¦„)4n}}r±­T¥Ç'eÐ]219ó¨’k¯oG.Šõmßì\x³“zLÄÊQ,³±t1KLNXêä§™LK¤ ËöG¿Ïœ1Im¥ú(å¸8)ž²“³*yáÃ/vS37Ï7Å„q]Èk&b+©&J9nNGã× Zr6Q%/L¿Ý){–íîyÿÜ÷,ïß³Ä~R]äjœF¥´ØŒb»0¡%s,J½‰íÃÏ~4ÊM#ö ¡”ãàX4úvVbr¶P%Ï0H®ØhùÊøI[.?/ýŊͳNç¾ñYÝX}Ê"ê§<Šà­OS§O׉m Ò”·&y ü,£ïHNÀÛJÅQÊqpRË㌀ƒ–pT‰mBúŸ•æ?Íè8NÀÛJÅQÊqpRËÓŒ€ƒ–pT‰mœ3mÊQÆaÝÞžö¥æKÍ<ÃØP*‹R޳€3Rík-5°¨›,ô82n8`±ßýè,ÞÏ"5”È”£,f3RÍ«1ubQ'¶Y8Ãlz98±xºë+ÎT ¥—Ç¢šßICL ªÄ¶ë7«ºì=÷ýüRGày¬±ÇT)¥—Çf\S -5H©ÛR g#8·8àçßÊ —‘ØV*ŽRŽã€“RÍ+15à¨Û8ÔôîB5Ã~Çk b+© J9N§½ð$¦Ub„´Œk1qû´ï+ŒS. ±‡T ¥—Ç¢Ú÷ ZjP%¶%å—!|&¡¹Ôì—†7AÄVRA”rœŽ’M´Ô¢JlƒðÑRÍÇs_r^|É{L•RÊq)pl¦½9¡¥)UbSŠò{Ùü“”þÂÈÉ7‘ÔC¢PŽJ˜E6%S' ub[‚³L«¼ùØÞ|Ü÷s¬3αRC©,J9ÎÎHM´ÔÀ¢Jl³°šq•·Í—Ñý-ÉðþŽ,ê0/±ÓT/¥÷‡§›kQbjðR%¶½­döò¸ÛßmúeäŒËHl(•E)ÇYÀéöe„–XT‰mzð‹‘¼EÙoûwC}ìš$ö›ª¦”ãjàµhª¡¥5Ub[ßýŽr,jú›5.q šÚJÅQÊqpR¦¹É%¦Ub‡ÐLKWpô­Ëéb©J9.޹LÐRƒ„*±-KÆeÞºìŸ7»~ÜqáãŽÔcª”RŽKc3m)´Ô ¥JlKfeÞÍì}ò±×—ØoªšRŽ«#TCS -5¨©›j¤sLJYÔôeÈ%–!©­D Å1›T{BLpÔ‰m~W<ʲ³éï½ ŽØV*ŽRŽã€“2º‰ƒ–pT‰mFúåK±Ñ—¨§C8¶ê Wã ÀLÚGë´È€`×6 9ã"ïSû§›~8ÿÛJ…QÊqpR¦¹´ ¦Ub‡tÌæïO8Ül·Û¾u¹ðÖ%õ˜*¥”ãRàØdsëBL RªÄ¶a˜éƒK‡í=ï/Ä|Ì 1©ÓT/¥÷‡‡x¡¥/UbÛ‹ßéûR½—oÝËGy‰¦z)å¸8<ÙÞÇÐRƒ—*±íeàL ž½l»—ò;MõRÊq/px¢½µ¡¥/UbÓ‹p#Ë_ì3qyì — /\b‹‰NJ5ÊÎL6×·´È I×6b ³Ü$»¯}ësöÖ'µ• £”ã2à¤Dó-ÄÔ`£Jl㘾㛂cÛo8sÃI¦z)å¸8<ÑüD%15x©Û^fßê2yéwœ‹ßqHß½R¤¼ò­/õSo:ÍJ½šú?Eœ¥ endstream endobj 1102 0 obj << /Type /ObjStm /N 100 /First 998 /Length 2233 /Filter /FlateDecode >> stream xÚµZM¹ ½Ï¯Ð1¹¨%Ф$ÀX`7†sIc½‡$†Žw,²˜ ülþ}UÅêÞMwq«ÃÃî®z¯DRÔ£T9Q)äDrV3J Bfp(ÜÌÀÊfh6.®Aû¸¸…–ÇÅ=t²‹‹ýÎü+Qº}‡+¨f³JÈ¥³È]ÌšªY€¬4~ÅÇVƯí2îí’Ú¯œå*ààˆšÝË„ÇîÆÆ€ä<#<–@uà±j<ŽëZ(©Ž_{(¹ФPJ*àyáá¡PdøFJ(Êæ—ê¥H(m ˆ<Š!K œÇؤ¦ñ,¸˜ËxM™+8ð,E ξÂP¹_Áù܆¯T‚¤§ˆEÎ㎄ÌI[Âã»d‰YMAdø  ¢ã©*Y ¹– =rå #dæÍÃCUƒÒðxEÀK5äÚ‚ò‚Òƒ.qCNà‘;8ZÚJ#¤È@Ájckjckê·¦¡²= G)ðr1/÷ Ë¢‘s Ïn ø®Ï7äž¹VGV‹PO¡Q÷æÐ8YFâc²;z MÙîèªq‡„Öê¸CCë­=€¬„Ž\/þëDÉ, ½XìáÜ€(fÕÐa‡ÕBWOJ¡WóCo–7¾í=™•G‘óˆ˜y#/h”—QŒo . €ÜƽÆn!Ïdó2ç*åLvÛÜÌc"‹ÍÎléÓ˧þý¯ÇpúöééùóÃéÍ—¿ŸÿôÓÓ?Nß=üññcx›P Ò»‡Ó÷>‡·˜Y‘1ùsÓXTjT̸Ü9W\÷mxñ"œÞ„ÓŸx§—áw™~¾ùæÿ¾’“K$ ‡s EnmŸ“ï䔇_SktSî䬑1gÎF1cÎìrꜭÆf蜽F+Ü»œugiQ‘Ë'k”¦W9©Mâ¤;fÿÆY>§ëœ³Æ™‘;¨¾' r©;Τ±Ú 眙cÍr3Ïáì©]P&¤È!SE2E+ŽŠpV[Qá¡Äz~HÊn|¥-ƒaÄbyÝ¥<‰/µX°>„Ps9¤ 8ŸhŠòÅøDQ‰¯òéiÊÈ‘¹Õ$J‚_! $÷¨¥]cž4Fç´1îñM#keÜÇÈ5ãïõ’ÃeÎ7NŒq—oÒ¼à\PV—<…¤EI½ž§…&ñ¥2–ãÁ‡ïJÊ×ù&ù³tŠZ—yÏ ùs«|OªkKB¿b|¥§ùx}|irĺ„Á×R,·–Š>‰uF[]øsPnÔÑIu­HŠÖ³>H;H€ëþ¼³Æ0xÕRŒÓ´Ö!BÙt=¦Ê¨À“¼1VŽ ÷ïŒ!ZŠ(èÌœ±u( Ýc¤to%…`B“¹2 „… oÛc¼{­H‘/Έe‚y—æ,ý•Pß‹Rt½¸Ñ¬âæœ69öøî5 gÚ†4TC_̼h·…9sȚςu¢×3§¢Ž£ßå¼7”ÐMdÙ✵F–¾Ïy¯k[‰¶½±qv[uŸS&¥ìʹ¥ìç¬zîœô?b9IߌҺ~d‰¹Ê!µÕù½”ð¢7Š•»[º’žBß[[ôõÛ ½8¯Z%]ÆgÛ·ZðYñ#…eÑü¶Í"Ô-©„ºÓV=Lš‘«zè| Æß²òIŽ5ÝÐû<§¶Q>­¼Õ6âÓõV‘óœÒ¶Q®¥m²Ì©lNé•m‡R& ÿÒ¹C7©7%è©çþ›r‹…ò!¹³ Ñ9mˆ;|2kî[¿&‹¼!Œ³ÝØb¼Û§«ÖÈÄ$¼i _“6>7Îu>îrÖ9rã\'ä§òœ|uNÏ×]ÎIµuã¤ýXj4Æ ™ÜÏûE¶5/7ÖG™´oœD»|:i}ÌÖó¯eZ*¶û7³*yÄíbŸ1£kÎ7öpfÕ¹ÓÆ¸Ã7«Îe¶öjÑpYþ½®q¸MšÿÉö‰úyþ'Ô¢ÖÇ•s‹ãç¬ùïœæ×=¾_Åñex›So@ü>œþò׿…žB¥ž¾üüó»ÿë¢WÏOŸÙ+4Ï뵯ª†ºšãü9­Ú8^?ä ±ÍÔéõÇço1°pzýòU8ýðøËçðî×þyýþ§?€ññéó';ZXæ’OÏ_>~xü´bïþüøãOï¿{þeqœ-uul«½~ÿw‡.i¹n8ýxÇI½=Î8¨_¾=¹‘Ý 7Š솸¡‹a‡2«ÁnˆÛ5Õ…ýÝýçÊBfáçÊ8ÝûJs·7Îõ|x—³Ì9ÛÛ8×ý]N™Ä k9(ªjÔ$‡,„'Ѝ½›±qŠÆÌ7ÚŒ4‰3iLgï:4ŽžCbM~-ç‚Hn|}“A&åÐÆéãÜãäIœÏ|Î!A> stream xÚ3T0BCKscc=K …ä\.°hQº„äÎeUgbl¤±*OS endstream endobj 1200 0 obj << /Length1 2155 /Length2 15363 /Length3 0 /Length 16642 /Filter /FlateDecode >> stream xÚöp¥[·€ wœŽÓ±WlÛ¶mÛvÒ±m£cwرm[ÛöÍÞû;_ïsþ¿êÞJÕÊz†Ç;ǘï"Æ—S¤æ7²50±µq¢¦§¡ãJ ÐÓèèièè ˆ‰•̬Œÿ#†"V1vp4·µáø— ƒ±¾Ó§LHßéÓNÚÖ ál gгpгrÐÑèèØÿÇÐÖ ¤ïbn¦HØÚ;B ÚÚ¹;˜›š9}¦ùŸ¯2Cr=;;+Õßî~kcsC}€´¾“™±õgFC}+€¢­¡¹±“ûÿ AÆeæädÇAKëêêJ£oíHcë`ÊCNp5w2(;;¸þj £omüOg4PÄ%3sÇ䊶&N®úÆ€O•¹¡±ã§‡³‘±à39@Q\ kgló±Ô?T€ÿ<= ýÃýÇû¯@æ6;ëÚZÛéÛ¸›Û˜LÌ­Œ²"R4NnNT}£¿ õ­m?ýõ]ôÍ­ô > þ®\ Â/Ðÿlð?í9:˜Û99Ò8š[ýÕ"í_a>Ÿ²°‘ ­µµ±“#Ô_õ ™;~>vwÚNÖÒÆÖÕÆó?`bncdòWFÎv´Ê6æöÎÆâBÿ1ùAý‘™;˜éèèXYèÆöc7C3Ú¿Â+¹Ûÿ­ü[üÙ·§­Àä³ cosãÏPžŽú.Æ'gcoÏ+þ7AÑÓŒÌ Ʀæ6P¢ŠMþáÏÃw0whÒ}Î=€î¯¿ÿ~Óþ/#[+÷?æŸ/­’²ª(å?ÿW' `ëð¤faP30Óèé>Ó³~~ñþßaäôÍÿSÆ¿|ÅmLlìÿTûù˜þ§b—ÿ Ù–ƒð¿cÉØ~N­1€ìÏkÑ1Ó~~Ðÿõ¿]þÿMø_Qþ߆üÿ$âleõ·šìoýÿZßÚÜÊý?ŸCëìô¹Ò¶Ÿk`óMUÿYZ[+£ÿ«wÒÿ\~S«ÿ>DsGs7c#9s'C³få¹ò_;fenc,gëhþ×¥ ¦§£û?ºÏÅ2´ü¼8?òo•ñçÞüï”Â6†¶F-3 @ßÁAßêóˆ?‰àIÿ¹‰FÆn0€–ÆÆÖéÓðÙœ7ÀÄÖê¯ódaÐòÿ%ú‡X´ˆ@+ø‡Ø´Âÿ%V:­È¢Њþ!F­øúŒ)õ‡>cJÿ!6­ÌúÌ û_bûÌ ÷‡>3Èÿ!­Âú̧ø‡˜´Jè³?å?ôY‹Êú¬Eõ}Ö¢ö‡>kQÿ/±Ö¢ñ‡>ýôÿЧŸÁúô3ü/1ê m­>÷$LLI¬­ÿøÿuê´FÿÂÏNÿ…Ÿ­šü øÙ:;üKÿÙ¼é¿ð3¾ÙŸlŸÝ›¹Û™ÛüËâSfþ/ü,Ñê_øY¿õü¼FhÿåûyqÐÚþ‰þiûùZû—ú³:»?êχm÷¹ß¶ÿjîó]Ikÿ/ü¬ö_½Ð–æø/ü àô§õÏÜNfÆò}î­“«í¿>Æù_øÙšË¿ð³\×?Èðéíö/ü ïþ§öOWc‡bÿ¯…3tvpø|ãü}!~nãÿð߯7cc7cC¨å[CÎ@‹ÚÀ¶Çj~,Wê½ îYâ=ÕTrjÏe‡vçg8ˆ$òŸ™þ›÷üIÃ=k;Âdw|+xož'Íõ!- ò­/^¯ºq Ó{­PKS¨“'üuý8_±©•øö½Þì½Tü,Aš:%ˆsíÙàäò]ûDÝêúËVÇ‚öä÷²HB¿–ÍPG)GjùÏÿ0ÈšG'w¢Æ¤øvé?ww?û-gòO"ŽÊû4бÐSã7CôÓ¼Çz…ƒc†:ÈÝ·±iOÃd ´EÏ’¢ÈMîÅlÖ°˜¡•À¾øyI ‚ïrè¥ÔܾRHD]9®†V*†“2R¼:HÏ âQ“„*ÂáÝ,lsŸ§7BÅx5 #ÊönÜ®ÓsåNJZø'þ)Ř_$IsJ¾ÝB…k\ÙÙ&Ïë˜/loË@¤œc ÓN9H²Bzx ¿K«?šõØÝŠæIÇj^2¥œÏO*¼‚3aôu¬ZŒšIq@÷@¶‚ôÐzÎÃ57 q¯´¿³r-NÛ7!²?­ë”ª4'Ó³(UUGÑZ}{ÕØ¶V ¹éhrA€»5Ÿ,·lFqSTàýº™à@Í óê)»Z4ý=j×YÕÖeý¬Õø¶•-5Íúü‘fanÇZ©DKgñÖ+Ó,”+@¨` Bd.žO&é¤Të‰1â×o.oД^ËhšÇ/ÏXTaÇÙã¿ý>Ôý¼ñ ¶z6ÊíQàIgŒCKÙ€s.œÝ +š±(‹†`^½ŒH—ìiPýT“ÓX¨‹gCüáBW*{™H¬l\|D6¹³‚½xùû§qB¤äÔ*%,Á£‡• Zšb× ZÖ«£2Ù8ÅÃÌ o5 KœÈ‘Fôˆõ¹tÔ  ¤QÆuøù”~WãÅFŽ´ŒÁõU3€“~sqO‚\w5:ç$"ìÇí‰ls#Ôm^þ×”‹9V©Ge¯V3”Œèà¤_9Á½ ‘öv_Áö“:Nõ±‰Bè…>×”¦%fêÕûªsÕâb9ü ßÃŽHäg÷õÙÀlxéJÚJ ;@ à/ ‰«˜®ä~<Õg!FX­CÚÈ«÷ úMjS[]-ws‡d'ø\¹²œ¸jàHÄŠod¥X}(ÏY§ø­™'Ýö`K%JWœËû†V½-¬uù8€xüƆ¥I|Ä ßÒç8O-ü²L éœ})¹‘ЪÏIËkÇŠdý@¯ítI B›R°ð(„=Dù"WÕ#›Çô^Ș֗é̆_ês„Hì‘ P{òWßF{A ; õm±<n/tÈ×ÓzX’™vqÄ;=™çAJ%œ%2þ±wíCýä5®4Ò‚Þ@Ì?iƒÁ!iKøø¼0ãBú#t÷^'Š– å /®è8#u lü̬ºYƒe =è‹5ÕÆ´™n†×ý {0 Ü[0fx7/é­ªIêZÕ ˆsXLÜ € »m]ë l2{uЈ*6ÇÙÌþN¡zŒÅ‹S["ôν±\8ËÄð {×A/-õÍ´ˆ~²ÛR^¨7õÐ*ƒïÁ&Ë :ÐmÌ–q© ˆã])ÑšxvðM >šã¥ß{4ÛyÐá"úZ„/5bS5üÒÒyÛS”½ ´1~Š<> C`=•§G„Þ«¶Ñ£«/LÎN—Tâ‚Ö±¶A5Ï_ÁvD¯ëx“·Lªä£<€Üó¦âroØžëÖ I1 AG”-àà«[U•*¢ æÓŠìF‚Á =ŸÄ¹Œ|zâ‹gñW‘ÝÃêšá-â'ûÃ+Sã2M0^̈Zò·/õöE«ñH…a ʬ ,]D¿ú½8ô§¯, ›0pÏx,^f®XSÁzL<éõS¹‰¯öµV{)+¶½ßƒ…±²œEåP”¡'šíµ1ùkÞÀ‰¥Ì•‚è)ºÓÉc[—)T5’Lpíyfú¢S\˜Ôžsu¯µ×xH–:ºJ€4¥Lƒ³ƒQ/®6X?$“UÔçÑZ0B?Üñ½ò¬}8îÀ†$›Y¿7=Ú1éE3K‚팪f9ÔoFÌ*ªrÑjŠã¹êè˜Óò0°#¬>š{ÐZ÷žr¦¨»¿X,f,6”‹÷Gá€4Ɔ¿F ÞÆQ,®lri#ði¨²By;Û«XÍNQ©Õtn_Žã/Íêä-U)ül`᡺݂£pðb>b}.¶z ™¡È)ã‹«O2 ú°Äªõ,Ñõ½›ƒD˜cvqc`¹=0%5Xñé Ní‹UºÇ_K*„ö’@œˆƒP˜FXéžW]LG7®äq}ãU[žØåu^7䫌ù8K½K‹˜½¥• hi‡ îKUYð‘íŠg»@µ5Audèh´®Gòá°áÔH X{‰E5¼Ò¤Û-ûéÚ@l}xzŸÇ4ùÝ£;E æèކК§§^.Y/â S5XÜDJ-ê^³e°ë œô&hJR+uÄxÛUq‘¨œ•Ž 5‹OOëa&d`\ó¬¦+²Ý~rQf—Ä ”3-Pˆ¾@óGuúÖߎÔÞ&ú±w.¨ Ö„ß˜ÝºÊ šº-Jo¯~”–63³/=¸(A•X¶×…›ï‰97l{YZèo ËÀ7êx†zÓƒ¿RÞcÛî Üñª°¾¢z¸â\÷Ç»4cV¤5 å ôZmeAÅÓ;Øe[j/ǃÕ|@.l+2fi?ÕO0âל,ƒëiú{Q>ûÂVRn{Ó»Sùñ¼þfj.ÄóœpA3}£Â1;5úÍ{9ä¢C>Ü Vk»Ç*×8Эz<ãJ‰ˆËïZf…­ \ž3ΤßôôV׳Òñ=@ ©ÖïT†Þ‰`fþw%çk²h4מ+³‘À’1 Në(›ä’gY¹Ä¼C6ÕëÎî}§U Ò¼qILr]_Z˜A­˜¨#kî&–´}Hðdº zÊ——Ö¹"HǦ¼„Ç¡ê1ÞµPYXÜ@ðª&Ä GgŸª˜)0¬¡î|š¡Ç,P3`pë5 ‹ZâV:•AHR_ŸÊøëçåëÔâ2ª†'æZ7‹î)˜hÌCm†F~jz@ÐÛ·%ùôËšÁ—>ÜD:MWÑ+ˆ­Ìò8zÌè.|J¿×)FÔD‚\ƒ¯Õt¶RŽ[¿Ä¦+Câm³—c›­Ä;ãD³WŸª1-H‹ ”åzQ ÝtèÍlhX”]íNŽ…õ„±uÝ;Ô†UÅ}â0…Ãî€\ló '&„´•µØ˜Hv%CÊÄ.n¶kVßdÄ·ÕaK§r wÿ)¨Sƒ¥FXë/—ø¢å¨0'ëâÚ<®)þ˜+¢ñn3ùÒq…õnèkº,ãB¹æ$ô6“-»¼O\mùÀ¿†¶ÉÈÓ£:>8JE PN“{‚º0¸Å?¨Ð_0CTð®E9)pý\Z-ù°âA)`«¾Nñ¨¹² ¶³ÿÀ3öÇv@×1‰z§¼dIj4”x° F†Â/ßÌ?ñŠø û&¬p”Tä ¹•r¹Œ…l#äJz"êÄ»›Ya+©u}®ÍÁO\Ë‘M„ÊŽhU¬Pf„S«Ê³úuZ™Qãû»œÚQ:/çï¤ħŒêDï´xîð!0•¼–÷mXÄ=a~Q{ÇË5Ïm¢§¹_ÌIÑ@Ã(×åoŠ$¿BÓP!¡ˆÿî/g¤.Ѿޤ•H£o˵š÷×kàÔ3É-œµ£€)+ùbŽ“J‚†.ËÞj>›®ñ Ä…Y\ìcŸ.‡læÛÚàòUR¿ ?áâégÌnÿ«{3b¤8第,™bg÷¦h”Uýá9dõ Vm‡â{ "ŒÒ7TìÏuDttPy5lT4At.xœt®Í£ q—_Z*róe=à饠iü€ë[¿!xÜ,´êµâê—há¤*jQB—Ãh:"œz†'ûiŒÛ_Ž å{[õ“˜{ Ó» ZÁÛ õ„ Pu2Ž-©ùè@Ô©ÃtØÑÙ{9Te{ÈfvrBso¿Þ÷6V5JBþÀºvžr…ÒâŒk¥õvœÚDDØv¦i>ØZgŠ8t f,áihb ÜŠoTf³>3ž~D>I½¡Kd“vöü- ,Ø9âR'Á1ݯô€ˆn,(Å{–p‚€š/Z†zŧswëASƪð¾<¿5ÃêIŠ<Àƒ?ø8˳ê8óêážáîN¿`Ô}D‘“<+<ŠºÝ7ì:éå;8}ÅeHãk§ë)»ô¹æÎ¯tÒÆTòužeZRü@ ÆõdaèåÕ¶§À:6ÎM½†=žÞóùS­…¸˜®¬{öÙT?ÕÏ›Z© ÷îJ½®c–&0ÐYM½xñÏ“È!Ù.X§ñîjEL7w¼.â—€˜ýè[§;G9W°¶•Ç™¯§pÎT4ÌÖZd~ÍÀÏ¿ðå‚[ÓWì²Ø™k¾ÛIüUhsµØ¾røˆÏÓ¸6$cž±t­õAå \J¼ÔkhÒ. ø‰¥R4m­…™‘þãlfl>¥3™W@Gìp¦þqå’Ñ,V)´ò3hF]èH³I}ÍË¡ù(]QMºYx£)©#ÂjŽ–}Y%r"'Ì YÐ.TMBõ"TÊðÛËìAˆ”ÀÓ÷hês|ºò{Ø(î@‰»û6ð« õPÁa ÛÈæ|ÁW¶ÂGñ!I¢Hι0]=³Ùý»óð·/¨?·c±TáœE4‚˘½Q.€ÏÙ§ÃKaݤ§ÑÆâpDÛÆ= ðos°Ö;éNŠŒ“¯Q¥´22j~# ?QÑ” QìŸW‡@×MeܰŒQôÕi;‚ÁЧÊ"VÏ…G$­=Yxvyá=ÈÃ5~Í{¾ÿ6þ iß½kzm /"¸ü:^óv*;­Vêù5Ó«ûÏœ7TT-3ÛÐ5ÊN#ÿX­DcéÚòŽ7DN›·ýãë¨BÍ+‘n ¼¨œ eOæÆî¬òÎõŠyŒ¨´šŸÙtibØ­`XH]˜”W]f»N:… ß9[b¾°R :I©æ¯³ë·‘ƒãåWR”TôU²ƒó<ÌL¹ÊTµUä+²ënvi¶»i"4dœû?óñZÞð*ãbJäCži‹ÝVÏ”$ágž¤}Aè ]Ô³"Y>MNþЖ —­> îüÃYÖÃV§®—*0Η!SŽ.h»wƺH]-X;ÉØ¥\¿»<Üñw_˜ÉíØà Ì7žÖtÚ˜ʵ k¿˜¶WRì†Û{8Š” ùJLóª|lðdÀÖ¯09M× P!G =/Æ;Â'gqÞcZ‹žçEYTÉ©¹y­¼ky½l5so¢Õ¶»áXFÜ£UïNņ¶ÞäožQ¯*/®æ 誻™"?²yKù¯ÒÙÙ¤3aÌoÊijž—ïOm¥s6X¶(M6+‹q­ƒVÃ÷' &õÌrh_G·& {©´(BÇâ½—­~s:û€f”(Úˆ¾Øt ¼+L gbk*Õ‡¼ˆÿ¹Ý xR0–"!³¼B-EÃÁÖCñ0ÑÙ`¦BHöbðo!¤DF—ý#¢ÃÆyÆ¿…òMF “+1Γ,|Åóa(ž‰*Í{ÍY35­»’VQwÙ¿ÑEíìÜ ßÅ_ö(§É?ÕœIg˜LÝÇuÌ)ê/Jà[IÇ5Rô&åú5±z‡¶×ZCÞËŠúÜô§)ji·6 ƌݣTÕ~¶n(Yª~+ÊÁÈÄ aY½ծܔ®­ìM·øÚùïÜé)P‹‹6 ú bµƒ‹-Î4ÚÖ:\›#Ï[’jâ4õ:å‘È ­GûæÒÛ<÷hz5;cè ÕŠ Sg}í©}¡Õæ·üÅæE Wm@X ™Ñ܉ÿ "`ó&Ž("…q2e†9È´—ÆÐ—5HœÚ~[m`§2‹{44L.þ{Ü]ÃŒHCžÆãw.r\ÉõþÈ3Êý¬Šð*Í…·gÃJÐ ÎÌ—ÌΧ™u”œ'-|$½´‹<ÃÉ©–H$6ÎίҨŠίY=7ÏEݹØÇ ×`ö–c“30ÑÓÜ®,Ýב¡(¨¬K?ÆcÅÈA¤·ëBÇ:BŠDõĈsÊÉñ#Maù«ŽB“£oD¶¸v€q0aËkXEÎ¥ÝHèìbø˜ Õ¦p&òCÓWÎð¡Fc¥dÁ/ð‚•¨4:…€Œ•Ç=vôX®ÏÝòÔ™§\g Ÿô‹ñòÇÆïòúÌê£ ;H ™Ì™¡~“­j÷ÒÞÔuT\†s”Œóõ6­‹¢z˜¦‰ó.n¾·xyŽC}UýbâÃ0u€¹Îó°ÃF-³Ò訅ô^äk·ðdßu‚e@ù[¬ŽÞì4$_Fº™J(Tƒ·9"$“Î3$ÆO¾ýu¦_±^ yò\œ[¹ïàÛI¨e—Båhƒ_@³$mÂÈS–É0YäQÙ!e`]™)Ý ýcÑæu …ø?ÌÅKªÐÎñhšÙ9Ž’ôŸ36_à¢,ZSÃÛb±Ìƒ¶-ç¡xœÐ4‹éjxTl…$§7“¯Èc|Í$/´ª3ž÷ɪLZ”L<hŸ rªŸ´‡P|£­ô€Ö—Üh3e¯$¡Á•DðÛ™‘²Ü0|ICgG8ÈmF(o»:æŸ3Ôš®—o¢ë:çJ›bšz¯ˆëíOߎœ2\¨éJ‰*º³õ’èî|^ÍýçõÜaûZ§üùÄ7Jù-„‡j5]ø™ÊÌ«ºàn#„Êž$â.:«§¦&ßN1`5ŽM|vçø=t\ßÞ¸™¥Ë*¬j„pÉH*ЬÝÝnýòwµk0ü™=Ê{ga¤ÍÐEÕ"—Z¼pĈ¿óSPËä–}9JÓÙ¹mc-;ðOˆ›š¬F!R޶åÊ£Bµµ®ˆ¸‚JÁ> 9K¬ß½Ô®%8+ÍFž-s±§ÛlBWÈ7äÃúÊÑñV³c‘¢» †€jm:C©#Úæ«²H8[Ylù¼þ¬üŽÎ·ñmD:YÀúxÊ1=üxøx7¢²ç°ÄÆ vÖvwäÏ©“„»Šìžª¥z‰ýP¹Ûn ¥Ù”‹‡ò\ýðãà-kxÌÈûýƒÚÒY'a˜B›?âIH4E=a?*ë” y|GÓ–ŒåÞ¾º[Pdóæ²…QútÀKÅá£h‘,ëå´Yü7Ï1Ü €¤òÀX1¦Lm£!O_,]iøYlR¾^ÎÁnÎÔ|_ 1À–J;ŸûV/ïÅ„ÚðD#uRž/JñŸ2ªypB yïݤ}¾–š`‰ª˜Ð( ãMR¶ein/ŒÏ0‰¤Ò¸Ûx(\¹“ A§æ¸zoå´ £T¦úÁkVïh׿At)dÆZÞ§+TžwÞ‰Ìu‚óƒ¼^¯¼bJèæAï‰éã'Yçÿ¾VwdïÐ̦µ[ÉJj™¦3ÊΩSƒ#8UÏÒ2û²‚±ÎÃNB !3òâÂlU7û¸XÇc…+x–¶o:8¹ {ÓîE¶8îaâ>>?]°“üŽk‰€ ;Ž£Û æÈ#n‘;sñ.xþh“X¯¢†;“Db (,žÊ’¹…ª™‘ŸÇÊíŽÍí‚oSÛÈgý¢ýaVùÄ•ˆ™N Ù?“ÅW†Ëx ‰ùWç÷ÐÎå „¸Åâ‹è¬€ý=9(’§Üo掔­ÌÔ¡=Êð$ 1²îyêðÇÉ §QûʪÐl"šjä>¬ÃN@Öw¼Ãj¸Zíî 3Õ.ÏÕóo"̆9Ò3ŠÊ°ӄ" Uþ¶ãÇ>õ‹yñ"fÞ©2¯QÌ­5+*ºg)eË’6/苊 xΦ¦Mþ_ærwRš„möaÍb Í.s:H xøÝ!¦_2fy-ܶoJ Ý'3™™°Ô.ËVÞᱫGê¯jîß ¯Æz ‡WÜè&.}T÷53¡ÈI|Á§ÅWþƱóýt“ËJ‰V瘾›SCˆ‘þˆ×Ú} Qd„L2iÂa½@w(Òrô·^9z†¯—ö7…RPö.5M°¶¯";×Àj>—ì dL7ö¡=ÏòÞöah¾ b#Xõñt¨辎‰Ž~}ùüni"ú>Éû×¼CQDŽƒ_£¥ùqI @¢MÚQô»ÎüC—?/?AuÛtA|´oÓE¶ÛJÀjT*Þ7ÕôGD‡o—rúùãUˆ@{yÝÖòÜÈñ¦L_,*wËì‹Au·«AÑ©AÖöP¡tV9Û,ÎçõƒOP /7bñàyÀkäX‹ÆŸ¢J3Þß?Ön¹œDJUqýíÄg)f ò‹9÷5¸íí¯õ›ôÓ‚^Dy}‘Ù'‹•°Ë„¯v¬Bãõê™ûL±Ûzh ßZr4¤òƒ¦VšÝ^| ”;:¦‰ýñíñn»*v_6êŸø1°\¹î…Š]¶øö<° ZW¯˜cNY ~VXÄAY®Sàzä‘:b¿·¼ÍÊŽ•1ƒœ#eÇ54Qˆ L‘ãXk:R‹„}Olv†È"`Y„úvnÈòuKU ¸£5ì¦|èØor™ í­ .c%OÞ.Ý¢ªæ–ù¹©)We#B°ò!­ô¨óŸ]ä¶“É"º‘ Œq³ûA¾†lŸD(jÌA,:ý»ÿôŒ´éÆlå]hN)Zam_ÜÎÞk仑˜y³}âú‘þ‰°”ò£]í ª™Æˆ_ôØd¤ÊýK™¸«xùMù{Ç!Ú-˜ˆ†Så]v]9á&’ë'{Íd¯íÁЉó²NEÖÅ_u\=BÞætGI •UÍ`<®Däja{NpÀb•Ýytëˆ/29p8 È¿ …Ü®¶€lŽª'±Üåy3‹ƒqŒTP[•ÙW"s”¦nBU’–®'ôÃd*bt€ß0EžÒŽd–tÊ(LzÓ[O&Ø™_#—x†óòœäµß·l `6çÒhÔ8ü(´?yp˜ÕK¹¤`³y¡Ç§èO~ï’X§Dïv€TŸrsîòÆÔúYù4–4«R‚¼kqbÂÄ©jSE:ôÍX¼(_cÈNªM/Ï&&?ûd]bŠâ´A‘…`¹&nléÈ:¤ É]þ50<}ÐÝÐjþ’pÛQa”:RU & Ù9/‚ÕÃä.ù²à+SØcM¦³+Ç®!j¥Ûƒ:µ¡¢ù=†«Úù„R2»9‡Šc§´iÓºõ:Ù™n‘ Z¯bWù¡“ òRÎëIæ¡]Œ€ì'Yãü4u'1]œò;§+ä77MaŸ²(K4öôL$_€¯ÔéF‚yŠŽ|¯3cÏ&/Þ.¨›Y‘ú g7Ó žl(ƒ)#é$Dìµ x7¬ÄöY€m“=]Ó¯ ;´øß%ÁWß™¸~w²¥Pu&99*ǮЀõ;¶ø{’¯ŠÑ`C…æ; ~{É4$˜+º|œSê¥I—Øö7!:ê\ÞâƒyEj4—O)­ É6/€´Ù©3É ó‘—„œLHÑÒP»T޹Jª*ôÀVžkg&•ömÈǬå_Ö¾ œÇ}²Ö}ÚÄ·yC}+1;3WÊp;–Ùv”ûgl{É…û²AJâùséBïô,Jxøvt4ˆ1$>ør™rÿÚ=’€*ƒã Ãóå‹ÿŠfg½„úQi(h¢„“<.6õ-—KۚŒ]è{*Â}Æû1âw¾ ç\#1à½Øî¯&ªdÓöüˆù—¬_G^=h‘™ÞÚtÝZhÛ5ḠÃ`7;~ˆòBK:‰qLq€Ð'á ‰}i±œäBÔW•c;ºoŽï?Ù+´AÃ7Ÿu»¢D/"¼ ÞL`eⵕ<²ècÁ*>ùµ©õÃ]ã÷iTìFuÓ|ÎEúq¾¼_Ý~„eÝ/¼2/K¥Ë.‹Ür#æŸÂcÑ›ELæÐ(.+Ï•ºHD GÇ]&Æ VC8Šn”f=qLPqžî£LpÕ2]M¿®¥>KBµß7Р¦‰“aKè­ºgÇÁ’Í\«#\¬N˜E炊~°ŒÏù§Á—¢WŽ‹zü±dU¸Ÿ§ÀÃÀ©ó-g*ĵy¾ÄJ¹è¨A‘Vz©ñêÖø8Yt²B­èµÏ'e— Í‘a·$F{Iß3HTRQ;{Þñ|9\%6°2åÅ¥áˆÃ{Û£µƒß‰ÜÆö¨ñ³Z¸Î¬!Y’¬—«¯Ï¦`Xø’ù!éL”t’qó‹:š8¯\29ºÔK‹Ø, åãó ßNN¶0:ÂèZÂÂ~L ’ñœoUÒÂùÙ‘»àÈùÅVFu›TÊKØôÇ~ÍÛɱ¢F"#H¸&+ŸË~CámÑŒêROÙÀdSl%`jð&O–¦¯LÀ Fè] “ õ }ãJÉRø* ï;„Ô±ö:®&L¯L…Ñ{á°'^¢5èC¸#1Ù‹V’_µ‡4)òVŠØ!Oᵓ[âq°·\—©÷‚".¶f«Æ5±!Ž—å*À¡€¦à÷úó³Ä)•a‘™ˆÎÜ×^gÉ·«>½ÝGìÒ®¸l:Æ_à ‰³Á@Kþî®›EÓUk‘E×âwai©-\|Tcâæø.A¥m]¥E¿²ó~·¢°ë9›C9p‘¦VZÌ)~í ôY>‡ ´ç™ÿÛAx¶„Òëˆq þƒú»@¹ìgÚ~Õ¼JYßÙ5n¿ëÐ$?™ÝÚþ÷*Áå¥P×QF”à[÷£¯É˜8sõ`2&¢ÄtHä Sz±ˆV™^¥o½MTˆéƒ¾åIªN¶9>aT˜|.f+«£Œ¤e`#í©Õ|(Ó~jò]¬Íš,áÖø¢š8>WÑIF2äã|,»ñà³ù°¬­QP!oÄ7È<Ï 'd¯ÈiGl÷?v0<¿AQÍ£y >lˆru°l¯8JL&RT¨#µÇ‰^p@.§Œ´x. û“GÖ˜›ú¯(£fÅ`g¨CEAµdGB„ýªZ•}Öîª*ü·¾ñŽSå ÝLú¹W¿' sea"@៭µòò;ÖUtwòXb*̦Ðuƒe‚qK\¨(ƒ¹V:2Öç0ä¿õŸîë[ ƒcÖb¤?'Y¹Œ†TØj”[8ø…Ü£ŽUa»ž{ecWU(~ÑÈ ÎåÝÍúŸ9«0”¨\J˜ígጘ¬o&?v[þ\ìÇà>{s¢¹ÕïR$pŸÅ)é)ôŒ-I!ù*ûó¼SÚ#™š^ï‹^ÿQùoñÔ˜U=ð°ï”ÁíÉl\&¢Y*„]Ïó5B|^šç,ÜH]íÐ¥{NºøYq·ƒFÞ%@mG³^ "ƒ…y@ÙugH·’â‹B(·0D!7þÖđԈV¸û*É´QÖɳ10c˜mu…ùísW½¤$ÜNÜ#ì.N±ŒG÷lKÏm×¥äP=¥à¤vhÃé|û¦HRmÆÔx”Õ¡er𵜚WñÌ‹¾wÞ|J]ø‚uàBÛe©Í_À{›ÀvÍ\§^ë>0äá€R©±WŠ6Þq¦Ðtz¯{n1)ÅvĆÛmé;¬IxVÜNîÝì?Ò“[Ö¾\×ïs)±ƒGÁ¡kä›Ág}ðê*ÝÖ}11‘…é»Ç¥VfjëÈÔ"m§匊wèo7=D½ºÄgl#(, þqj´!¨k#‘æ~~Ýk‘haº¬'TCŠ-Ð@ã?¶†d Ds§Œä‰]9s)z¦ž§è4ßè.ø#mX=@7],$àÅCÕ’!€îÀáƒ3¦«d~Æ¡–HrkXC}ˆn_¾ÅNb½¶Ó†( L¨DÑn/Ê+)²ù]R¥DšÂC®Jb?ÀúŠÿƒtŒÞ`Oábìa}­ñûç‰ÿu†9±t²OôÆ]Ú­;J6ëNÃé­;¦L˜n(÷ýרï<‚š¼ ÿóÐÇN'¶`ÁÑÜv¿8N“¤¯ZCð×ò¤.è«RMŽD—ÐdÅq‘`™€È›¨­ùÖÁ½è´ÍÑñt)h2ZÌtùjñMS:ê˜<гÆ,¶­V7±®DØZ?úoÃyå/vÏ2 Ë^Û› 3‘•¶¢øO”îo.l–G—ʾh³C*ІÇˉö¨ÊÒõMKü·£ç—<¢´!dz[ÉÀ OGrHlØ«mt+,jê†ã"ƒ4áwC¨ÈC˜úš|û=‚g<õz)ð¢³ûû¿úLâMw=§<±#çk=ãôfoèj¦­b¿]´¶rr è)®Ñˆue‹´@úÄ4¿˜lž6i ÁD?³Òáæµ›ŠÒ VéÓ•>~³?Ç»&+¶d¨Ù%Šcþ]•hÝZÛ¤°MÂ6€ÔXðmAÅimÃÌ3Ÿݼ Î˜ï° MDêübΩ$„¯ù¶èöv®_·SÖ‰u²ŸÚ›T¾ +—(èWœ*¶}YW˜äw¾ÆWe|ÊN®‰CÝŠ]}¸yCkQÄQ‚Zrš`¹NøßSä42wù7¥fÌ¥„ЦÞ— Ûc"‚E5óOÚÆñ2(¼¤Ì?¶"nǼWü­ €1ÑÏ5÷›±ÑÈ¥6ÛVªdfé,QÝ“H°ìn¨8M*'(¼JÑ×°Fyw†òd7«êzi%Ép}^[F7Zü'½@ÒCãªÅÐq¿ Øò¹æá˜c’Ê-ØnKó(ÓVçÆFˆÏÊWä†~TòûÂ][fe¾ñåcß%ÖI¾-n‰”4ª­nÿðº*¸ßðås+¯e6rwf7¾ú¥¹€IäNäéÑÙ¼èô¸ýЭÄc–ôx=i÷á¡Rw 2² º%Rã@#"BÌQÇ:ï.m—ÊãŒ-)ÿS§¸f1;0Ó©^èÈvì—³.zÕ5Ú—ˆ÷@ÚùÄ”¬ Ë“{9w‚Íì¶ÁsöH Ê÷\Ì£Âk A5Y„Æ3rM‡½õ#žó_ÞœâÔ %åwGЩ‘™B¬ ¦©NJ\œŒ@†üaö<ó2f¸› eøèŒ8·~¦.¨µAi4ßêWÃ3¬÷kËü¦² ÇíÑ òŠh<þÀ@ÀÂç/nwëd_ H "÷J›º:¸Ùv[l'âå4Ú +B] (,µ’ÒMº¬èbMFÉ»»Ü€¦c˜£€òRÂd5£0ùóc(›_òRÔ qÌ᫪¬Gk”»b¶å;nã…¿?ø›}ó‹@„ˤYç"€7ÅÐ]%LÒ¨¬UN>Òìëܸ«†3óK|nÙÖî Âêìiýí¥X”Ÿø.>4K^§w»"3Äzâñ8-^«Aúóø¯àä•3ô.Ês$x|SÅn¬ÜÈ%žY$Õл‡\*_é§¥óæu¹)e¡| ×Õåç²ÀQ5~æ ;]%#m‘q.·ÐBÕVuÆŒ²Ì©ü ÒÓÔϼã]2ÂêXž·“.…U@çß¾ûB÷ÈØ ­ã~½Œ3ûeÅé—d2ŒžåÃ@Q´å‰6‡V„J©ñŒ_¢„d˼‘ûMŠÃÒÛ¦6†$nÜ Y€”5:5µÈ¦IÜŸ ²1â9Hxd^Ml&Ií£!ôw|r”gh׸‹Sáÿ›†i†Ük÷wÒ’ßtvL:ÏNñ;¤édabW'ZòÝ¡,Ò~©Äw8ÄÎÀ ÃI^îÄf‚I¯éçH 0ïTÒ‹ž1œ `µUÈ 'ÓÔ]£H,·ÐwEîùΛK›-â¬Qic¶4 lé „`‰ðä)£îÀ"¦œšØx 1×jz‹|ñœo‚KV”<,N~‘òµ|2jl«V"Ö+õ틵˜ ýKá 2ý-̈pŠ‚o2ùQ$AÓGÊNKWk{èÉÜ;¬ZM‚eqè«äÛ–ö½Ñ¬5ÄÞáë^DW{¶ D,¯ ÖÉ^Í€¥Ð n ï_×”Þòô­¸(Ý5¤‚/NðCÊx!X:D}+ª |­×²NV|]{ó +‡âø}Tó ®ÒdÃþú†×µ$H‚/BFL¥7dœîÐfûé&¥SÏÞOþˆ4Î,_–FÜ{3ÑxŽ”ý¿¼$”Ýeu×½ýÜ]3˜'Û=ÀEG˜ç˜#ù)Yq/êtLFnܽ5§ M~µ÷ eŠiÆ"­ ArÔù€º\B¨»¢~@àЭ{ê#ä6ôxqM!†gà‰Âg•L `èi¾ J«êXàAÕä8*‚”Eë:¿ü5»Q(mÒ¹ÚÝXp"¸„µ9›«Õg Aá¯Iœuœ¿†gwŠ÷ûið8Em;ß)¿•™¹Õ‡¦Ê>¬áÆô±P$Z¡ñº ReÚÃH€…˜IË»ÿ¤ðG>#0×<²i¢(µ‚‚ T‡7‰oÃ=ÚÔÊëQÅC=5 em»úŠiÏ Åú·ƒøAÆ­ƒÉ$ËŠ›½º·¤Ü;)½õnµäijÍ!têÀÄxvU4ã^ÍcäÒ –Si·ëûóìÑê ›V»ÛaD¨‹¤< 8ήB¥2—blü ©v[a^Õ-ioÍÔJBÈø‘½— 5Ñ}ù†"ö^œÏþ !h[æ—Žnâì'.¤ÄäÑ=œ¡_ÜÓ jC ÷ùÍùB×>¸c3T®| «1Wõ¤JÑá8dHîÔ±GãÙk™£C@›ÌÁ AOe6ìl|c¼Ôøfsç¨%cª_õ·Žú‹öTŽm2ÒíWäJ4Éœpb}àÌí @MX§Z|ØŒŽ®3Œ†.nú±²òAÇ;_˜Ú¨¶àd³yüÚ¡òî=$PGŸÞdóRìkÔ7Iå4¤„›°bÐÏä-–SUÏ¥ævÅÕîÜ(úK^Ê32Lj÷fÕ?äz °žSжXç(1;ä.üâºlñº3î¢Î}1+^Ï¢ÿÓpXÒÁR<2†¼§PGxkäWtâŸõÖ6I³¥‡59¢¼kHÔìÿ 3Ƙs"z¤N¸Öº:œNÌ‘qÅ|ÿÜié7¶OØ7ÌF–vTeÈ¥ïbêêú\¨BjØçöÞ¸À6åü µè0ßÃàÛ‚§í³•>uü¸¤’¾'˜‚&Y,ô¤&:‹/ż‰ãrï[ý}6öÄiþ€ô>Ì×/_ð†*­’ër®œq*´çIw¬º-Âù×óÊ'I†1ªŠ¤†k³‰bj!<ü6f>Å÷ÖS Ñý^Ï ƒYõs÷Ñ’Þfö~0ÛÜK^N<ë~?à}5ÿù¿½k|WV~³‰³Y±õk¸Z(K·JÀþh²¾÷@ÙPAøré~+?°Z¸õØb¸Á3o7KOÕÒ ‚©xѺ(†Ë÷9/àÇü]%ñàRgŒ1)hÏýÉNnGb°´Å°À/û]ªmî¼]!¡1.ôï¦ÚðÞ>w~÷ì‰äVÁùê|²€/Ρ²^h›TD%ÏfŠ0Iø’+Ôü‡¦¡N’:ö…ÛÞ–*H¬®–§Ý´î¢i'«8úHEìïkŸÂK›/uühô×ro–”‰ÂB»*Œ Ô® ˜'~¯)‚ÙQŠ\ó&§g ï¦Å¿©”÷váƒÞãfbÑ:tV  DRVéØw~€FÒ ¶(gwpÐäá)ý¹æE×ôÂy±é`@9 ~’U£Ëšø9É¡²à½8ÕŸC·þ“œ6Ì3Î2¾ÁPσ6³H:õWÉ@®8þRæ«ýQº’ÎG>/6&ÃLLܨ¶Àn­ø“¦SgSLk‹¨ÎÙÌŠá3ð´9= d°AS¡˜o‰U“Êzî¯Þ´=›xI1`úò$Ѓtñz Ÿæ _Nˆxk‹öõ´AÍÖŒ÷†%­ðM=œnoìL"ú°®v´¡ÆŠûý]»&“”€B\®u„,?)'ü¬JQ\MþÆÙ¤eË#[ržRË¢àc›Ó¬œDPY„ËòÆ’p–D˜/[L¼ŠDÆD÷ _'>d`ÅædWÇ W½˜4ó¡Û y…Eð5mL¬Þ$Pý”:íOw.õDäá½íoà×ìÃ< ¡ª•Q`Å!àqÑq/µ£@QlA Y6?³Å±±zgå»@Ö|ÿ9o"W.m<ñ¦8îF…?ëâ5s.Yöbg"À´[^hÕu&¯:ôŸO ,4ý ñþ}#æc ü®æ<ýwˆ&¸ïã„Xþ@}Ç]ÏX;á|'/ðÀâ³$,bîÛËh8e_ûQÄòÉk˜—Ù MÐ1vËIoôû¯ý1–ªÛé¡;õȭ‰JZŽ;Ó{ Ì ÕÑ?bÖ°†›‘'0½t=Ø´V¯Fª¹|ü*#"¥çC"Vìó°:¨UÁë½r÷MäaÆCï±­³å‘VR¦ÔîíËkõ[úöa÷€§XÍxäÿ{ ¿RæuÀYù‰'¢ø\VâŒëÚb\5&UÝYZ_!Cöç”Æ×.¡[R\GÇ᪳K :ÌçÌ®a·6à3¸î²(g¬ t`ܬ;½ðʵÙUÇùÝ==Y*ýÅ+8ñ’0óá¹ý+š tºÒˆ§jPù¯{PYÙòÒ‘ÈÝk…ˆ¦¦ñuV6l¦/ñ?ñ¶!SÍød¸%ï bHÒìK¤0ç:`É0'œK»÷\Rs}o>D5¸ GÛhÁ¤™ ȶMý®à endstream endobj 1202 0 obj << /Length1 2279 /Length2 16654 /Length3 0 /Length 17990 /Filter /FlateDecode >> stream xÚŒõPJÚÇ £ÁÝ- îîwwwÜÝ]‚Cp ®ÁÝàîw‡àÎåìÙÝœ}¿¯êÞ¢j˜_?úï~º‡ŒHA™NÐÄÎ(fgëLÇDÏÈ –Ò`b02²Ð322Ã’‘©X8[ÿ³K¦tt²°³åþ‡‡°#ÐÐùcMÄÐùÃQÖÎ åb `b0±s3qp32˜¹þãhçÈ 1tµ0ÈÒ¤ìlN°dÂvöŽfæÎuþó@iL`âââ ýW8@Ðèhalh 5t6Ú|T46´(Û[=þ'%¹³³=7ƒ››½¡½£-ÀÍÂÙ t:ºMIÈÚÿ-–  bnáô·AÙÎÔÙÍÐøX°¶0Ú:}„¸ØšÕÊ’2y{ íßÎ2;Ðþ½9&z¦ÿ¦ûwô_‰,lÿlhllgcohëaak0µ°äÅdèÝi†¶&9Z;Ù}ĺZX}8ü«uC€˜ "ÀðCá¿õ9;ZØ;;Ñ;YXÿ¥‘á¯4Û,jk"lgc´uv‚ý«? G ñǾ{0üûp­líÜl½þC¦¶&¦É0q±gPµµppJŠüÛçc öÏšÐÀÆÈÈÈÁÎ:€îÆæ Pñ°þËÈô×ò‡/{;{€é‡  …)ð㬗“¡+àìèôñú§á –‰ `baì 0šYØÂþÉþ± 4ý›?ÎßÑÂ Íø1~LÆ¿þþûM÷cÂLìl­=þ¸ÿëˆ4%e¥¤¥iþ-ù¿F!!;w€ €Ž™ ÀÄÄÂà`cøüoC‹÷Áø'VÒÖÔÀõw»ûôŸ–]ÿ=”ÿ¾ T€ÿÍ%g÷1¹@åŸA×adc4þø`úÿ<îÿ ùÿ7åeùôÿÛ‘˜‹µõ¿ì”;üÿØ m,¬=þíñ1¹.η@Öîã.Øþ_WuàßWWÈÎÚäÿÚ$ ?î‚ ­™õ·ÑÂIÌÂh¢`állþ÷¸ü½®ú×E³¶°*Ø9Yüõ´è˜ÿíãv[}<N3ù/ðãòüoIQ[c;“¿n3;ÀÐÑÑЖñc”˜ÙØ^L×Ñèþ¯)0ÐÛÚ9„>ÄùLíaÿ:Qv6ƒà_K;€Aèq„ÿ'€AäqDÿKŒ±?Ä`ÿC̉?Ä`üCõdþÐG=Ù?ôQOî}Ô“ÿ/q~ÔSøCõÿÐG=¥?ôQOù±TþЇvÕ?ôÑ‹ÚúèEý}T×ü/q}Ø ÿÐGŸFèÃÓø¿ÄúQïã!´ùãý×3˜ü?zþ?Žáïñúãð!ÇôÇS ×Düe¶sqüGÀ‡‹Ù?ð£ó? }H6÷°7ÿxÖÿx|¬Yü?z°ü~ˆµú~¨µþ~ȵùƒLâþdfûµý˜âØ?ÔÚýiæ#ØîÌbìÿ˜?±ÿx!ìþ±]Ljþ¡•é£u§?õþ" ë?´±}¸;}<¤ÿMùÑ‘“µ¡“ù?R|Tù³Ýƒ³¹#ðü!ÉÙÍî9\þâúüÐäö™?¢Ýÿé=þz=ÿ4÷‘Éèøw©ÿ¹äÆ.ŽŽ?uÿz†?^€ÿð¿~W@w 1ìò‚ñ—`ËÚàö‡jA<7º½ ÞY²=õT*:¯eÇ—'D¨$ªªÌÀ Ç;Á¤á^äÕQÊ[ÂW¯“–z¨°ÖŶgïýx¥é½6Ø¥)ÌŸ“'‚u0øt*ûÞ¯ÞjVà- ]Rd9.œˆ yhnýâîue¿ÆBö÷«Ø¥á^Êfè¢U£tŠçÈr²æ±‰?9Ó@S£^º#ÍÝÞÍ¢fO¾JÅÓÀúœF³zim2Ç<Î{®•«0;uãâha€ß¢ŽM“{ &Ka-z•ÅJ…F™è-4ñu :°Öu-ó”Nnbé—!íL‡Æ+n“ Y+gwb£æÔqϼ2éçÃ:)v¼bzFVÌe:ñÿ´r>S`Këûfý9ø–’ÿSçaØaò"ûNÞÏ.ߊúoï~ñKÌF¹ÎÚ=^†îg`¿}&'Åm¡¿kߨhžñ©Là“Ž0™eùdpö]}èg%ê»(^iô4˜´åX͆T—'â{ŸÜ÷ã þ=žýGx°ÍE•=—à%“2màtLº%·T-Ĩôs ³r^µvâÉ@–*ÿX¹,h ]p-GU‰¡aArxns˜ÙMñ½÷DýtéÌW¸#“*!“oÞÓ’eSç!zn_e‘*LIDD.˜²~°¨'äw‡ÓM]wIÑc²/VÎð¤ªàÈŸ7ð;bSâ”Ëb|O†ß"ÉàkÒ²ì¹3Ïn IU}s«zÿ½ûRO·Û7µ­³¥.G/\H©6£s!·¿ŸÓÑÛÌ‚‚9'Èe­ìÔS*ªÐt_×ãaªìQ²µÐe´‰2ÞgÀåB`óóNa{(®ZÎÅqJ†×ż4f>pfHdb9·µGa.R¯Ø»©™²»{v—®dÂS•zü×g–òß»‰B7¬ Ï=En°ùa¨6BÄ…­qúÄi c÷Ö2Ì|Wì”2\Êô@T-žö¥t6é_séu ³4ž/(⹌ TÝ~Žšå Ü‹UèÃÆy ˜B¥¹’jó¯ {9êï-Jº ™\ýZZ6ÞÆXvÁa5qÃ’:6¡r ¡¾¶i‰Ç{gðw98Œ:8¯¦2ðŽK Iíòýï¾Ð+kãg1ÝH à_@ƒ)G(Vö RzLk‚^ ÕS‚DR_qJ8AƒFž”~Rê •·N åAô/Ït¥¿Ú_¢%M¬^sÕE)x9´®|J3WãtiNY·aÚBÇm¦ï56ÝÉu"Ìuq_æk§‘Žg›pOYc,¤Y¾ ?Ë29VÊÄ^sçcïÖ =mVtŽûn¾ç .ÊÀ”l†£™réó)Wù@‹”ÞUðA.í§¢%5¦BíA³&´pzÁT¡i¤°Ï q¬Ppàyøh%|+õ~ ªòUù¢ ®ûRApa%‹gÓ¡ëÓLÎ…}Ja~h³I·ØœÈbq¬I*=½àÓúq>¶Î?3ι­ js÷‰Ä(¢p3^ò•½/>ñ‘«È•×\´[_ƒò§G\¨ÜC*%nñ– ÛOÞºkdQì%¼†pƧjÑÏRw1?:›u–æt5rѱ[“?×Wf¼,[S7Ïáqkâ7ÐñáÛsÜ%5Ë´>×.i}ö­´¾}¼-@m3Ic*çfx˜Ñ¢Âv¬úDç"*NÐ\Bq±¨y:“£­NÄ+·8@ˆ¾‚z8Ðlíÿø0#UŸä'xù fßõÞ’Áqj~%3H‹@™ŠµÚtFÞ^Cÿ«³/€-Y;VI‹”ÇkA˜Ñ_5ïžà´ƒ¼lï­à4Œ1 kéz!ßLKA*/I%P@šZ¬]4¼ÊB˜Nª#qΈ`"?,ÿZË$ö²Ô<,9®62¶ŸÏ]î¬4oÝ~'Ö ¼(«E\ÆY¾Ðœï:{Ö.úfö$§$ ·dEêË¥Ž ì!¾Î3;öH¯ZÌ‚Mñ'9x€ÈLvÇ%àМÝÍKɘ‡w½ÒÕ'c ID¸pz†:ÂÛIp1åÔTú'ÍMQ@Etq‚²ícÁÀŽ/I´Ÿ> u¨.Á÷‹K"ŒG©q‹Ì‡ÑT)€tÀ´#竵ò#(¢Ï]¸…¸»›a(Ö©Mm¨+²§–"žžÌü£Ü±’CúÑ/jŽaùö ^#¿qßóý5)˜Wá@I~¶ß…p*ðžNÅõg>.2ɲKþeÄߥ;gáÀÏïÚ®vC×8=ä‘^WWqÞ9®TŸ{éEBññYr—÷“¤I“pÐóaÒÚ´,~µéÉ3kN}Y"Xm›³Jïá …½*þcÆ5P?˜OãƒÈ^–½nÊ*®7VnõÒë oœ{:­ám]—(Õ´d„›4j0ÏQ“ý2f>|ïDƒ:‘çñôS¿Á)ãûOåZ¬¬CZCç КßÓcŽo-dõWb,8/fÈ…Ù…ë‘äy²>K¿J†X²E¬†Ì ¢u²]Lø6~¹·hÄÓï<Ç€µÓŸN3¶º•˘‹| ´5È{r]ʧbNOú•öm—”ä ýqÚëíúåÇÁve£Ž˜ë­ê©:\—¿õ9,™;¤¶YýòYˆ%»o!ª0ÜÆ*ñ·ozVÖµH­«døo„TSd¶êób™ò è²Èi~Ãès¾×Zg¥+„’y!¤EÙ£*ÔîAeºÏeÉT7„Ù  Î¬ZÉj sº6{áj³ ñ+òÏ þ•·íTf o-°Wdt`Rª?s´M«U48æèqCŒÃ0# U!¾ÒÞ›s\pÊæ±NãÃxrqïŒÕmY¾Ù8ºÞf(ÜÄ ð}Ë6òw¿jÛÑ¿o+•ékîφóøZ–T}3Ɇ4­$Ààez¢(üÛç‡ÉH7ôÐâïÒŽcÝQ8kÛkötÜm[”©B¾]Ó™—ì,m*â9»>Ã/u/ó¥ñá‹a†ðéôã1˃:eŸ™·3©0O¸i§ÐˆùÆÝˆ­K,˜’õ:_Ï /A¥sRªHnO9e)™5|K½ïý‰ƒß@ã~⦚Q™ò’ÖÄxR`„Œ ü$¥€éKÉç˵MÞW¸îÚ³­÷N ÙIÕ¦Áv€Çk.7h(‡¼T[J͹½àú‰iÕÌ•ÿÀŸ•½Ž#@â.ó„èíºAîæµÇ2o[ž• ¤}¹Óhí}¯ %Ô9WìÊãj¿nïö7ù…×µ›¢6V„Ô·<‡fXš–-¸‹[Ú KY[QSIx¸%q‚*UˆŠzMÄ*ÎÞô¹¬’ü÷,iän<Ýþ!¢²,9~)Œˆ‹ŠEAú;«n/…¡Þþ=R£¼2c¥ú€Ð-Ûv"ê «ô\.ttÎÂU9$}•¬ãt¦FxBòsjH`œy±‹¤÷íc0Íûci17hœ –2ÔeÅ^öJU·[ybÑÅg?‚©Ë«^±Ø>žŸ„9HÓÚÄ!îŒè (;¯pi·Z^^Ñ}7ë„ôÁØðgœ£ƒZ0õ=ãú†df&¾m~qF;‡Òês?NTsÁÏ×rp¨6À ÇFެ>§EdÇYñ¾RÅ9¬Õf,õzhÛÛ÷ºÑ¯Ãønë¬vínÊÛÔUÑò¸Lòzi"zFç#ªòÂ8dÓËÛù¹kޤO1ÖÓ¶é²n{<™pÞÃ]¹Í—ënØÌ$m#ÜÞ£Síì빋¬Õ…sVŽ¿}%ƒADc mnæ~§»V„WÑöj§»—l !k†4¥n:âË`5uS<²Œr rÇújÐèï§v*‘ˆï ªõ;ëFˆ¬› tÖÁ,0úoS¸l@þò¼1ÚŪL­Æ;ùá¨9}VT+QÝHv=c r5„«ªAn>þ•=nI¾óàúisN}‚¹Foû!ÑS¼êì`!—33ñãõÕôC_ùx™ï™ÞÌàWˆ]üöuèD(éóˉÆy\úmL‹†¨HMæYHÈ>PµMÿ0ÛÚZ±ýõ“…]IpÀ71žº8\–¹´-ð·µm92ÌuÅOznØkA‘}^ä¢QÜyV¼¤ð#¼ßéøB%5M’Þ…I°Ù¾ó+U¦Ò¥Vî…€ØsÏ›†fÜ,ËÓr¯Í™¬R>]¡_ÓŽc›D͉SòJøÊ‹Vñ^y=„î[.VQ#†9Õ Ï;ÃT[£Ìz5”åWÀˆöF˜çOÄÀ§â‹ Í×â¶dÚC“é0ë.v»èÔ³ª¹¥îÃ\Ñ^Nñymä4DÓúb íxäHP¨#Tu ö6)Á’gñ[)† 8R_a‚¢úmŸ„Yé:8Á&-΄øx;ô±J1ÅÜuîHå(Ì„&se(̉ý×–×tÕ|‹:PÎØ+õìºz÷‰—’c}íå A.H!ÔéJ<=WÛÄÜôà'¾iÐäÏ¡Ë *0‰ 2xr\uâ¾¼4††¹ O‹¡m”õ°ï°]à#³ïŽ\eæÍ“CûÛù¶3dpÒ¾<«£î©Û.†r$¿±8§lI“µõ‹{+ZßÜBÃUµ{dMÎN;ÓÞÖMëá¦ܸ×ÖHFÉue[¿dP7±Çß¾lëÉöÎx<‹›´ÜÊà³Õ’}–^·ßŒ§Mß±µïÁü,ã«.Bãí4b¢.Î^YëÁeôJƒRZ¼°–¤ÿœcú€ežÎ9ž•ØaB0YêzïSÒ!Æz_ÐXéyÐÑU»@­¢©/ùnFî×í'˜AD/Á½ê 6I½#]?ñRD7Û™œ/0Ñ…±\uaY"eç/iôØï—&ïÍ¿tÕ+ûInʨ4a>1{Ò™C£A•ÍUÑ×A|Õ5ªtuüÒ±Å~S³Ýê‡×z$¿›ÙÐbƒÜ>uÂ’í@I#OÀ Wrœ¶xCu’¡‹þî„É– ŠD%cd.«§mÑì?þ-¤Ïp³‚ðS~¿Ãþ/ ,¨a·Gëb¡ðJH8ÊÄFeWçý¤«=5A›²CÃ=²Ê ݪ::]¹!ô…‹Æ8u.{³>]™ò×òú3Âiÿcƒ|½lUŠ,ápû0ñßûGs?¦ãÑ­ÙKr%oDbð/=ïûÞÓ„¿‹]ûЃ¡´*HåŠgh3 vdö|Ž=v®<æ ãp\-ŒS¢ißB×–ñƒæ‡ùï57“Ñ-"Óo]à®ß‘Új£çžÔm¦ßˆr-"3…æR·?y æeîæÈ¯-‡¨+ÓÖ#Z”ƒY(QÕs#½¬&«O³\@KbIÉHˆ¦ù”0òx­µù\¾Ð² üB~ ±‡óèä¥T׫RòJ˜ÙãgM_Œ…zþŽøûwU’–JDNS¢[-;V)ýy«ù©l°%7sµä9[Ýèg7ð'/âµ/Ë­A‘‰\‰18߃r" d|_rØ#Bµ…Ysf„ÕaZ’ÓΟ}P¤ÊCE:å%¥È{Р@œM Ëè†>Uïûz2‰AÕC ög5!*ÚÍ‚_dF/ßR*ô‡µguHné™F/L´š-y·7ÁÇr Ý™Z/[f\ÁÅ‚k‘+DÜÊ^­9l%E)ª¯·èðNT¨{{V0XËßýš|Rì‘\–""´@ãÓú‘5±g“'”5–3´P•TºCsQXÇ=Ù(‹¸»„G¿xwtZ}³ fuñêñm^EÜïi÷²¨)÷Óíï¼ °|ØÃ¡`ÃÞ~ð!øÙƒvÉõe ½3CüW£ÙgU,ÐDsn&m2ÿ=mu>*‘1`3ëTÊ/<§hÎ<UºH¡ÂG¡48EöÎPôƒ¯Ùü^oÜTWÏ·‡¹*…WKmLï®hp“û xܲÞH ýHJDµ¶'ù­¤OJu g"…êî–{«h%*g 5ô –FJ!£_EˆŽºaŒ¿#ȳ!ú¿‘CN¡6)†éãœVã­y)|ïÇÉ x ûº“,½±ÜÒ7”A1©KæC[Þí#¸ÖÊÁÓžv§Évþ!“.Ö}±¢¦wÎP).H.EßÖÂ;òsÔœTTŸä^^ǸóéißÏ<2JP ÍÓz#Ëi”F¢®­+ †e÷|·tÖ„·Pª…ˆÖUð8 ”Î5ðÝþV;E ‚‡dzØ'÷qé3ê4h #ôCøÉSäEÔå@pþÍÜÃ’ À–;qVí`”“ÄÇkðáÁŒ{;­1u_ˆ›}X·é8a4qxfÍÁ"°«DnbßdÚ¿±éÚÇLÒ‘.Wï\eÎÄN²ŽoX,[7}ê=:ÌA¼ªLýtLùMzÓP§M¹ÄµWBBXí,ç¾µ>©7Q ýè»Ý̃p³*GAC¶ Ü(!C4i~®cBŠF5n.Í!*@Z¯Š¡QÁ³ä}¦¿R?k²Tüóp«×>i"9E'üO"è[µ²x9c˜•U“À´×­µï¤TŠ¡Â´£ÄëN¯Žp4UŒþÎÖ!ÁZÞ‡fQÎïå7’¸7xŸUAå¾íúÖâÂ_¡3IÏÁÊ*Éú ¥+§´s¡2ŸæÖ¬P2.S5ˆÌI] ŒFî’ã¢Åæoƒ²(Ëu. |í8aˆÃÛ‘¾)zm¾©iò—Ê pá÷Õò¦Ô wFÑù-±.f )Óm4;Ÿ¢Ú°ž‰‡uĈ“ÇsfšH0w°ÔšQ¨mÅG‰XŸÕÒs®]¹úi*»>À}_„@k‡äȧÞ_Z¯¥žˆ‰ß]Ë€%ºª;-Å®Üt¨XÅÜ]@¾ü^–y<›fŸ@˜P5©-t "©Ûµ±VdΖªËŽ¥|çn{»0s—q UHˆ©±};¯KÇ–`¶€ 6ÀÖ2žÔqë›6ž=n"¦xïÍ”wqIcÄõ<=CQ¬—ˆÚ ê߯sf+즛&nòX@€åBE:Ìaß3é¿`/áÖc²qŠ¢=ž¯ Ñåø 2r¸3_hpó¨ üFÎ@ÿ5ݘdrÜâ‚}Þ)£Õ{•wÏyìª8ùE a'È´ÊЩ·oÃ8†÷Õkìþ·:Y7¥‡‡ï3(!2sç»—ˆjþùêUŸù‘†Ãçe¦à‰…/—Öw‹³9-ÁE«a¹¤¨ž¾“»tæh1®—RÄOcÊ}4e ¢M÷›Êphâ‘.ÂÒßt~ @?aµðnpˆqò°Œ:ÇÙ_§ä›r¶iŒ³ÏYÏZÁq†I¼ñá¿ìÎÐ&ÿn’Ü7çP#ÁàýÞÚÛcø¬òK¼ÐΩäS40£‡”P&?ŠÁV—¬i«%k¹€‰z©gk Ùµå=;pl¢Ä¹ñ 4ÀCbÙ›ßý,ºÿó’܃Jûäš/0Uo:¤5ˆØ*v¹@N—WžU†ö"Ôw "Ä3Ndß¡}w.ÎE91zZVd“óÖÞ177-ìÒõö.  ÉÆ>v¼qsÈ¡ÁµÞ=®=JG!P•%S78ó®¥^$?[Ñ<t\y¡u3¥û'‹“$ˆI$s'O¹Po7jA°›‰g*4“°¬áè áü^üÖÎSxK1‰…¼†Á ¢FKžõIÄÎ$±ÚƒžâXb[òœr[TòÞoâxýíÌã3æ‘MF€gr@l–èšÅĆ1î+¢@£ß¿SS­õ/(kA¡,š™bka#åûˆ«g¬ ~8Óz·zÔÏŒš½R¨Ÿö\aÒ º )Y#ºðzcŽÏ¯Í„˜¥þšùèO{ êÝ€= =$£lÕL1nRþèÓ!·JCÏ‚â!îOöI¹°Ô²wŸ®¹:ëšþ,ì Ĥg4é©öüÞ6ŽŠzÁi£§¼ÔûË ·ÜÔm GðbI˜<Ðß]vëwÒ¶÷‘Ðð)—ôÚ]^¡4kƒø!záRE·Y«ó¯·SþÖf¢]ÕÛÛ\“‹~驪4º'í§ GLOê„o˜ç´ûVÇø®¾tÛhÏw±dÅ!JaÏ›;º}äs`ÍðCˆú¾í»š×’Y7#ÖÔZç¡/L@‡¥AÎoÊl†$ÒÄ4UPÈœKðžîVpÍ«‘)—“ÔÜzÙnê• þWÆá£ô­CÞ?7†Á•W¸d4-Hg­A¦Éå*6WY ôÃc‰ÞÄ®ƒ7øºýÙÉÀ‚$…ŽL5ê¯k’À9©T©«Ç Á¶`5°CmígLs¤l52À…qÑÍ„µ¡šÛ¤Ü%ãP\”þÐ7IÁ´Î!Ê5Ã}à ÙÐA¯tkí­ò¾Y¦4‚Ô×~2Œ‚Ž’®DýòôäÈB«ÂÂ),H^¢ùRîd}àê’|¤‚𭧆ÜÁôn ×-=”ò]U):4ËyÓÕ¿¨C¸Ï÷d©gÕyµñ¿¿Š‘ü!6jŘ*ÚfºDYr©| hïBúðÊ‘zî7ÌF"û5Ef‹tQPŠt¨S^®üýÚÆÀ}×jPèØüÓúÖ²›Í²+e%™Þ·91oÞqF…1çôŽ16¤p…Xov¯ªoÓ‡U–Âè^ô›5»½Q³íälr~Gaw9²ÝÛâyÒÝfò”j$éÆÈ=¯¤å“,蚢ß`5Ì´Þ#™°þF%ÛÊgÕ³¡øHíõà»`%©¾ÜÈè{y¥FnYÕ$çTò“}sŽ„—ôæA`ï!ÁÛ Zˆ¼ù%1þF…Xex帙î¾åì‹û ùá¾ýþü›ymb[¸ï—cóTÝå ñ4¥$߀ÏõÑûe÷`laØShM.Mþó pó÷Gîë@íyEˆç'‘…H°Ÿ-vÑá¢n‚´U4´üc?7…ÔPš3ò L[&b°±ñ "Ñx|}C\ “{˨÷Þ.×f9@¯”ŠS=•é¾îâä¾(Ã$qõûˆ;)íoÙƒ8|zO/­ÛÃP ˜ ">GåJ9§b(eöÀ©Ë¥Ã)6s4S½>ý^üÐÆØèÃIäÖ3k´‹ºèù°±¶@:ó¤›×iJ( ¶Œ£¾ÃdvÈ8o,¤•º6ÿƒwÇžMެ°o˜$݂ӑ> û¤µ’£"—Äÿú°xÿ+ë*~TŒèÕ"ýìƒ FˆòÌ lª’Møv@L°vB³_£YåÝ‹UË¥QÅ Bu¨WGg!ÔÜZo7B(Î/ä#𩘬¨)UÆZâã%Özví‚Ê •QÚBù/Ú·p=.¤ûªSÊïN`P®÷þßýÁwsõUdÁÔ§ÝÃçVÅÖúåãÝæ3Tò¾#’™"Ö±TÇ"~ÇÔÂ×H„ïYÛã‡8ØCŠrW‚×|`Á>fŸÅµÎR¿Æãê»!\¾ão@ö »#¡ßzs«U)5º]úO  IÇÑsæ¢ÇƒaÈßRA¥ÛÁRâå‹)³-ü>è]Ïfï‡òlãyž7ÝX Ì]©‰¯爷",ìa/ðº…ÔË8ˆô Ç«½—– ÚÃéçö̲RzU$f!c· –sÖIÝ}¾ÌÙf¼c~(Ëć® VžìT°‡"àù*ëñ´Ë!aÿ­·Á£Ñ/¬æ>ï6ˆ€3*¹Rʾz¾]k|#Âå]Ÿô{ºï¸³€˜·þ,­"Þ qªÆì=ÌWìŒ_Àp$_Fµ—ñû—ÛÀ›ócÈ4ÄZ¦mÈFŠ”|ߦ ÛO“æŠë–èyÆ9d­p–‡­÷žµA~ö—¦\ØÜ1êû+8Jø.ˆ[Pìz@[-ï¡JÉœ˜xû‚ÿ¼@½œâ¼J©Â¼íňð &Y4„‘¹™™`Ü:9à\žæÜŠŽ­8ÇV«rºR_k“DA' ŸÐBä6zùHÁÆ—cÛ¦,è7µ2pÔlõ&òn:ˆ¹Ô°l’Q¬W£å¢TÊDÁ1\™”,q£~ ¿_K¿GöÚN+oò;2Êù¥4è:ù6Ôtd©@¿"þÕVëaGULo+Ö¹º:Æß5]ñn AÍ8d0Š’Èö¹~¤âõj!Gô õÍPôUö(³©ãYø=î)osAqXµ¯Xû\##VÖ3¶z”%ÁeーÓÄÎ^V—áÈŠ/·wHž²>ýè¡ÝªÞÙf¬u;hcØ+Ó׫—&O%"¸àð/F”Ò•˜Û¡a^Õ”IM&ÔFlÑʧ²Mûƒ,§¦ÉG±+8ÆO Z…Ú\0§HößL0®¼Ð0yVÇ/ªˆ|ö_U&k°¢¡ ´„Ôqs™a¿|;Ó±„.ÏI²§Ç Ðv éSwôˆ Óo?ú¹N ³Ó/òû—b ÿ/ÖJwÂÍ¡‡(ŸØÚJßòxžËRÿìZÌݽ—™)ã2Ü= ŽIÈÁ¸u…ü{c:èÌ÷š Ì©”Œ8’Å}GZêÌ¢àÎúÏ–wͲ¹ý=!ÆûÅõ 9Å¡Hø*«q•':$5‡3˜Qº…d¹ú>;‘Ñ)þOôn`»;bRX|#Éúòa5´ÆÝ^R‡ Œç_]Èl•V%bS5á$ºŽðU¬í¬„` ±FÓñµ~AUn޶bâD.ûdÀøJ¼¬›¤í^>Ö†ÛŠ» û»Ì ±•Úä›éUÂQ‡©ˆ ÷Ýí;*ʤú-ãHL±úC3ÚêZ‚êr J¨<£D_Ü|&³@W7[Úüf „Ë3å­çr¨/3Í•­„Ü6 dø`a=aˆâ¥S,‚p´\õ$'¾ânRŠ“Ñ 9oÌæ'Õ€© Ã'…2¥Ž7ž€¡Õ‘[9”©V—5V›•„1 ^cª,c-kzbErð;¿ô«·XÈöqïœá’»o±ûÝPn¤UGþ:Òp„h´w%àÀiµlØ‹ò›¼²”¬×L‡WÒ²þîH#¯2@á5ÚîMˆä–dZYŸì ·g¦È $²Ý¬í‘­ºþ~³<€åÒ+„L˜´¥•/ÇâþÜÚm’hk°CìêÌ $DZ©Qv‚Ðe 48¹ª×µ­‡”ÙªÝýús>úp ¼LN¾~Žå1šŸ+\cÕV ªbÅë¾µeñ‘]“¨~å8(Ÿ÷K>L¢\ü÷ÑFO[=´M¯þô~0Ûù5’ü¤C<ÝÈ®Ãc'ÂF‘:=WC"HíÜÙúZF ZŸ…°v¬·í;îc7œ}Ay´ úß!µ­š.È ‘Dcãï°I^Þ?äËTØ ©éœá»ä®ª?ÏOí½™Qf•=À#éa «=‡NØ«Ø)„âA^ aõ7¤]‰ýÐãä‡Üe€í'õRßs#B€­ ù…m$õKð ­bï_UñˆVõ†O¨D¦!Ÿ :5™žºï8gþk`øìB6îÁ¹¡ED®f™ŠgÿÌà»7Tˆ¯³åUuNm¿F¼§RÚqaYju|åO©¯ÿRæ"Ïm­‚ŸÂòðô,¤¬ÕµŠ³‹C”O¥§ã(Š‹ë°Â±_¼“,õ¹ÔY^Ѝœœ›‘[P¢Óš nYgÙY.×"?qx~£‰-Û_òêh0§x™®m«vB¨ñ´?E êáõD\ªØÝ¾·ÑN–÷ªü¤mb3”ç<]7ëÏ–àŽGø6?¢ùf_¢§æxÉ;ß)#z½wlÜ{çs<ñf÷k ì3o«Î*dD;»Á]¹ªÏN3€w'ÝH}Gô[΀É4íʦKÍ ƒ¹½)V˜ªšà³ÉNTuæ¶ JV#´hÙ9á^ìù;ã«]g<üʼ‘Ú›®áqFQ 9ÞÉ€$_|4ŒØ@4K…(sÉpßõø9Q›¦×èõF¡86õ”ƒÒY»þ•€aýá%Oø—'W'â)>0wPÈ—idØs»]—ÔP„zþm õN„Öð—3³K)¤¤Ô&AŸc‘R7*~*_Nœ~ ™­HÂûŸ¤Ç_U±ô‰Wœ~.™bÞ?TAó)·[a(á\c*iI®˜ivìú½"Ž­.”Œh,5^„¢ðGŠ6‡X"¼°ý¨9n¹ë¥(’@{À—ó'¬þ£EÕCèMÔ…¤‹üÙ_3ˆ¿ö›‘à©ð˶ˆ7žD+ÐË•øìfc š“‡[³ÒE \²—×ú‘ÿê“tÏÛ"0RŽ6 wl!øÜåŒ{#G¦·X=…þ«PG-'‚)T¯Å©´åϰ"Ñ^ÜÞ°*84Uzï¬}lÜÑUŠ:ÌÐêÕèõVf ôü”]ðOTÞ>Tèú9é <¾j.EOܧo²ÍŸ®íØÃ‚EÜÀ޺ČU~ãöÌÄæ~¥©U–³Ê[ñã,ø‚‘Õ+¹¿;Òç‹ÞIJêî»>„Ü‹HðŸ¦lOثӀ'´½¹iÞìcǾ·ÕU Ÿ.•¨lIcêv9ºV˜ HoDŒ”ðÚʧ᭶“в‡> Z㆜:w7NEeÙ)#7Ýpª!<‚àHgXgZ²Ju ´êî<{Ùä ¾ ù?êd¿£F J†…m1†åeË ÜŠ›§œèoâaÂ\¾D" éú•«Œv™cÒÏ€ÔkKæú©¨;ÂÖÉ»¯Ü -Ý ^ @gÿs8xà„Ä‘€»õ^lÏ„Àp{º L7mËÌspá`Ä<N?LBþL° eÒo6\áŽ!áKÿ=u/„WŒè’‹xú^ˆ~‡½AŸ'¼Á{\:^Þ»åzN,«½mm4z‹º ÅO;îÀ?ƒoý€~e~«ò(khÃÞ8.0,ì7ãØ(‰ ò¿Á€ì?LZ á&¢HéϾ1Íð¢ó΢(šIÚ¦†ÿÆÊIžþ+ì× øŠU¢¿/7 „tüÉÑ8ÄLîw˺¢á5$ÌàÔÊØ}]ßnðÈ™¯éëöÆ V±ß$ÊK=Ð7±.#0êO/€‘gŽë%²Hè† Ð!ôâjÊðˆžø)‹’j´Ý&¯›pNƒ˜Ô›ã[ð= 1AEiðWÄpì¡IûÙˆÔì $SȈÁåŽpËçÎ%3@X¤ëÉ®nªkãWTÔ¾ åôÎÏ÷.¯yÖHPÌú›F-¹™ŦìŸt(‡Ê17õ|»éx 7à é\}V¶TðR¾L¤VœZ]f°HèÜ\Íͨʰ“°ÊÓÎ|3ò¥o—óØ’{>S>ØP[Ví$X³PX¬ ×7i%1ÁmöÃO°Étì“)Å~W^x¸ú¥“cœvŽ|tµ)&"ÕwZm >˜þ ë*L"âá94¿TÒ°§ü3¯0&eu^˜_’Ù fö:܈sÒbÎotͺ¹ìS~ÄIöÊ+²çÌã6)ëKVóç3ˆT%^0ìì«mzzÇ_ÇŸ¥ë£|Oã·¥ T7qð–tR*÷Â/©Íð‹ì©èGl¬°å‚ÈáÁ'á,Þ´‘žäˆrFåm²F’¼TÄ™1áepY¯;5é¬&þù¦éƒåyŸV*øˆnÙ£pVüßPÐOÞ?U `3úBp?}ÖϵZܰoÿüVœ½Uä› Œ¡•BO@Ð^¹ÔÒCª•×1à—Xé$£¾ŸÒÀ‘-[qÔݬl³XN ž½CYÙ‡¡¬evTÊ­•Ë1÷Q F ¡›/ÇE*GSŽs{ò?0C•Gr¬£ë$”UZpL¬q™²aÉÝ* -vqø!1m¤j°{A«8¹vU‰n [×Äýã“#~¿ÊxÕŠÆç.,§š:üÎN“+KžœŸ2<²š8¦å,$ÜðsG°ÀÅfƒßqÁÌŒ /6õVe–%I}Á]ã†r6û—:qäûïè­3ÙKqiΕ‹¹Ë8yª—”&HJ¤äYõ9xÅç›Å%—(ð…uàå;“èêØªËËdO†e&â¦Ði̾˜¢¿¼Ï];c˜vØâ«$ƒCÕ~V×åŽ ̗пúT¯Ç?û‘Ü¿§ÉÛ£¾$>mÆÑ¥RqbIÝ\ð:‡3åþV^ÐþìÁyœÒ5Ö%äÇAlï*ÆšoUδV“™Ž˜ÍÔоºVJÊ'Þg ½ò­ bamÊ€lëô«(á󿨫d3s2 ÂÕ † œÜÔ ËhAª†9ºXç¥Ð{»Hºz‹sƒü’½K“¯« ÖŸÌBG±óúúͬKýSLSö˜ëa8 ¡[q mÌ_ @Bœ ´;ÏòYþ ž…ùqs2nŠ.ëå’3ÉãSŽíµr iè¯Î|¥o¥ªÎ ¸ÛFú"ÈHwêú×%™µ‘?zFqzSµ\ŒˆFAÀ ’O»;¹J+dhÂõ9O ·.ÅB¯F)®KZìÝÂ5p·²$†–$þŠCŸØÜ.Ä=ìšßèí¤Mòá¶¡××¥_¡e­Cú.ÎrÝÚPu8Ý•X«ÚR;­³YXµ>®–õRºI†4¬U‰¤&_x’…Aɵ/æÿ ¼Cû`£iԹțFã׸†~Å—ÎgÎÁŸ9MÒc=¢àGfa"tÚz`<•-™[ªé}xRÃ…v:6Oã<ô€DN5vRK´¾µ”Ö-žDß"×@~‡"~ìÙ9íª$ü‚%“ö>½¢ÆlíÜLv–Žoi–{ÍåRÑîM¤h›[Þ/7Ý2-b»õZûCp›ûX¡‡ ©yò±Æ«­"òï •­qoËüj³Mt ,TyË]„Äðó‚Ý¢´u¸÷Vy{mÏ›=ý^c«ÿ7®ÍiÉÖ±ÒÓo¯)ä³X#`ø#Y’,Vzgpõ¥ÀA4>Hؤq¢½E¶©ø‡÷?^u~£Y›Á®àÚ’ràøBø€A7I¬]ŸË.€Oó9<ƒ+¹ÊÄùP±‚³Qº¥GÂLrÙÖP„åJžóZ bDŸ0kì›s†6$RS%¬&ÒÈɰǫy`…1.’XÆUßK†áô¬ÒDí2‹ºÐ’ûgÔÀ¹_r (º|.ì6<&ø ÎÜ·bAhÌôx5À³Œ]V‡ë !ax÷»Ù<&yÖßÿâá`4?½1,ÇÛjI–¤‘¯K²Ž´žúˆ³ªƒ‹IâL§‡6#ÏEÊ©]ç d»:²E>Z̯ mÒ¡ú4XÓéýÉŽ}‰¬†ÀŽÝaŸ Ë>$ëÍt#mýï&Vƒ±qì0uÁlI ©2||g»ž¸3Ðá‚-iÇäšñ¨ž™)€¯,lKŒ{¨YÝ‘…üäu²ƒíc¥ì´Ç2Ç9> stream xÚuTÜ-)]ÒJ Ò1tww7 1ÃÐÝJ£ H7‚€€”4’Ò"õð¯ëï[ë½5k1söþúìïÀH§¥Ë!m³+À  '·@V]ÞÈ àææåäææÁfdÔƒ œÀãØŒ`¸ùÍB!î19âÞP¨¸;€¼ €PP„›ÀÃÍ-ü·! .y@lêœì†Í( sñ†Cìì÷yþþ `¶f……ÙÿpH;ƒák B؃ï3Zƒœº0káý¯Ìbö„‹—§§''ÈÙ·“`axBö°î¶üj rÿÕ'6#@Ïâö'¡ ³Ex‚à`À=à±CÝî]Ü¡6`8à>;@WY  é†þi¬ö§;à¯á€œÀÂýåý+ú‡3ÈÚæì‚zC v[ˆ © Æ‰ðB°@P›_† '7ؽ?ÈqYÝüQ:  ­ ÝwøWnÖpˆ ÂÓ âô«G®_aîÇ,µ‘…9;ƒ¡7ì_õÉAà`ëû¹{sýu¹ŽP˜'Ô÷ï“-jcû« w.}(ÄÕ¬,÷—Í=„ýÌŒðs ó À®°—µ=ׯzÞ.à?Hà/ø¾_˜ Àö¾ °?Ä|ÿ…íëòpw°¿ïïÄ¿OØ@ ÀbXí PìÿD¿‡Á¶žïïñ˜rßËàþõùç—ù½Âl`P'ïÿ˜ÿqÅ\:ÒÊÚ²lµü)#óørðð8x„¸@>~>€  Àÿß´@¿ ùÍYj ÿYïý þ®Ùã/0ÿµ!,€ÇÒ€ÝK `þÒ͸ù¹­ïÿÿ¿õþ‡ËÿMæ¿¢ü?•þß)¸;9ýÁ3ÿið?<Èâäý—ŽtÝ÷k »_蛂ÿÜ]u° ÄÝù¿Yeè~¤¡vNÿ â¦ñÛhAÖö*æO\ÿ×®9A `-˜ä×ëàrsÿw¿`ÖŽ÷/ˆÛ½,ÿ À÷ûóï”òPk˜Í¯Eãá€àp7öý5ߟø¾Àû´{ý!d'†¸wÜ·ç°…Á±Ý©€Ë ²ß›Ý`|ÜaN`[„ ÄÎî†_è7Æ ñ.ð»‡óýÓ÷ƒÀoÂ圗ïOÜŒøŸ$¼üÿpÈç_¤ð}¦{©‚íà 'ˆ›‹Èû?Ž÷½¸Ü¿iÐÿ ú±úàûù­#ßðßgó{¤ßâý ÿߒ¿SÿÎÎÿ/ê·ô‚¿¿çÿW°ß úEÀa6îÖˆÿž‹ðê>Ô’Ý÷âæîìüÇ?·ÿqâþüÇí_Ú³v‡ß‚øã}¸æßç?^ü{=­±g§`Ö¢aµaïTK?öäXg\7|ÁÂá; osÿ‰‘ÆR•²?—Nëï"œ_•g>“š£½ñÝm®Çˆly®Ýzåwm‘¬3¶ÞŠ=3JÖ;R¸+]×CEÅ¡'µáwãêgìˆÚŒÜ¡Â˜ïê.„¯õŠø‡çGE¯ºžÒ¯Ÿ#¦Öµ7ªTq®K¿pÄëÇ™O0XåLRÐ?@pPc²><ò"˜8;˜7rG«’̆í¿Ï[äk²Ì“p9é³P®ÇãÖIù„Ò„‚õìáç±§¾2[é*äÓ¾%E‹¯'èl]î%MÏõ‚ŽîÙLüdš¸ZàÉ)g¥L¿LÚž Œ;uï³ óHQ4øõ‰gÞîã³rYuU *Ôˆ§fÆz¾ åxÎý€÷äù[– pÙBxM{ŠÂ3ãx{rÈDžºk˜Ë¬a©€‰p ‡o=®º˜~‹BTARÆWÐäBw4a‘Eyãüܧì%«`‘‘»‡gæG¼¸âÙˆvO§bËõ¯HØä* ¥‹z–—&êhö©×ú&µr¼D_3šÃsˆ¤ —‘1îòˆ 1Ò*—ƒö×lªð…í Í\úz¤*¨Ÿ¾úøã[}V@ù&zÊŽg¦Gù·¾‰È[R`ÃîíÇ]e$$\g#ÇGXŽh $“Û=ü@R¹Üø¨EŠ^ÓAC˜‹Óê3æýCQÒ/ž!+b†7šFó„X%d.AÆ™€°_É< ú¦W¤ž£Zg¼eR&ÛOýÙñð•wSpMË¢¥»òk"é´1 ;Ø#Æ4}=‘ñš‚EM«ª’‡,êU±Å…yÔ€}âç1Uh›ƒé©RíDA¸zŠƒ•PÑfàLâÌDf=“ùÇd¥È6›ã}pƒ©–b!ˇ âh؇ñË>:cíL´Òøf ¦N•}.”ÂßV{?ÉxõŽŽ[ÿx–“«ÆËaHˆ7‹ãìëÁŠD¨Ä£6á ±l޹×Ë,×zz¯åX©[•Õüó]©ª¿•|µòš–¸8§vÇ÷oKª|º-2¼+îd>I³÷r &ÒÔT¹S(ÿ<¶òµxß4QúYúÈÍ9^TŸiÁº¼Îè§cíxÑT|ú^æž·uª%eé†$DíìYÚ'qA͇XÂPí·´ b!RäG9ÌÄ´bsÈQñYýØ"Xü'µz#Ixž¾­±¡Iwu¶¾^bXUÆ·¯mÜê^W8+_qDéÖ¡QçÎâ†ÑB×6?ûùYÓFÙz{ÄóqW^uíš{hFJ/Äš<‰Ð`P>¨dB6ž÷ì¿êתDuIü~‹Þb¹Ó©ØCc^ãÔ@§Dö±-zuR'ý~ ÙT29ðràÎ?#p\Pã+K⌥ðY™¼2ó³ùuS‚%À—¶w»z¶%¦í»}¶}óçqà„²S<•Æß­¿Éöö¡õ”ÓT \Ú®ß_z B+ôìôdìfŸÙ¶„i’–ã„¶óª.ØmÖAܶfžƒ%Ÿ_j4‡'M§ýxXþ†öµ8£Ë98õŠ-ñ=÷§è@±•‹bóÆÏ¹•SÎ&Eùý¸YU´Wâm†öÆOun}+èx¿Î¿ßbÚÕ€ P÷×$ZÅç;Z„R̽[ÅÜ®¾%Ë#ï|ûhhe—©S*ŠØKºÂÛà‹¤®ºdq~e1ûQ´ ×!j…<3ÄmR"ã»VX€g3µÞö€Gå<½rMâ ¨3Ž=¬Z.·‚öb:1 sl†üƒ¡è§ê­½ 6S¾$™ï¬HTi˜®|¢‚ùur~ÔpCI݋֧Ӽi%c‹Ç¦jëû—eçGϘ|㮵X >×Ȱg¹MÌ©õ®â'eyHÀ¢âRるПUØ~”yg“4óìòDÁù ?CØZ«¾[àËà ·2³àD\…{‘ª ¼L½víêÖ¾9"vZ!¯ÄzÓoéº?á}Éûn¡ùºMp›ä›º*]5³Û…­Ø€<7f«’ç¢É®„]}ñÇ!¥EdÚ@ZXaºuQ!©¹¥—"A#åOw8™åB¹¹›ŽJŽle©1HLƒó*Óç½(ã˜Ä½">*¼Å`»áÇ<$½)÷Œ¼Œ]§YØd°SÉšP‰P[¦ÿɘ’Fé;é½ðE‰òš^»rh:Û}˜C`Šr 箘sÈ­s¦Ÿ¼È¶F<µH—íy’»š£l.7ó¢·¬”éUbXòðṜb¤îƒÚO¾¹ ?. ëÀ»ÛüQ€qD/·Ýa7™ $Y&ƒM q± }¯ ^‘˜7Îi Ayd”ÍV92ºS]qþ%¼=ºýƒˆ-y™‘ú‡ù=ü‚æ‡Åˆ^q·N­KØJ-•¬“×=¡G"}¼=m|m^–`™Oû^×Ö˜„UC ü¾#•‡è²{T Ì÷|ãì9?ñ[e$™•ûòmŸE/P¶c3}‘þu2/-É*¬VŠUGš=aJ jMì1_¦eœ—\ïÑGd˜ˆüâ+¯z˜ƒHdFDe¦¹çæbîY–¬tin“ƒyøÕ•*_ú)õ¼t·xaͰȠºæ¨÷ ›Q¿éê+öjgÐ,ks EÊ€p†ILµù@aëû¨P¿*KšI²X„DZÂÖ+Ï™a8Kï(5m4Í×Ç*ª¦G ?jÑ)ïÀ·±!Âó†Ñ;äé±O—ß‘½"|‘é°_ûô‹™ Á8V}2¶-Ž´—rº^U3~)׉ò3Õ¨²j0ìRã—ùZ|yj5›k £Zƒ£„%?Šé¤IS$1^=½ k9Q¬CöÙGŠö54AÒš®}lÄ2¢/! Ó› mø)bÓñ®†ܬž2½_5P塆¦‡ó†òaZ‡ÑZP¥7Òöü÷×)˜¡‰õ·~º­—zd-Íu X˜ò)¥ “8./“v‡¿Ÿr¬a­ æ§EÆ?^#—¬Ÿˆ«Nš$«Ñæ^M yèÏÎõŠ>µÆp~ÔÉê=naÞC[J¡œ!Jƒ8IR=u3Q}‹ëj={8æ°Ùp;êWáF¾°úýèxi—Š,šacö¶]&>°7‘CÂE:² nNoá>¢ßßhÅucÞì¦5WbËbw ‚¢¨©ês–†´¶ÑÙŒ¥ûêÙQêÙ—vZIÛ¤½Æ[ù.³¬Ê»r5½Ç[ýŒAQ‘õCSícñuá*G$›öˆKÏδóMˆ'ñå7A* VÛM ƒÍ ›¹†ÁNÉrÁ×Õ2~×;é‡ý!žï¥ÝÝ?IøêõÈ™ ¶ÜíöÙ¬ìù>¿¬ÀüB¹jˆ = Uw!ŽÈ‡Ì3\°™±“㹘˜ 5ut¿j®ð´v²´7sÝùn8H…áñåôÄx͇®Æ‡;™âæÆ‚Y³¦à¡Ú·:Cíùñ0xÏYé¹ò²º0Mç8ôk«V- ¾*%{9Æj‰7¬l[¦Å Lˆ{.Ô±×t@ÿN†~ivñbHÆÛÚÿ…Y~ÜÐ0>®4-™Ô³ý°+M? 3€Äeû³|ÁÖÚRÎrÇÀ>åç•ËÖ|vbSÛ­äk_evZ.MvÍ:PdHiÊÂùíCrà”ò¯óÃHmž÷x–vÅ ÌBšœ¯D1Îxp)è%{v°Í--jÈÞš(0„´hͶ‡O=_d³S… 3 ç‘ϲ Óœ 4Š—ôˆc[ÍUë7.Qyæ-¼ØÂ§ì2Ûûê×>º×R:—í³+pÙ¬½ Ž™ ¦W|$Ù倛màržÎƒ½á„­YïdŬ`,4¤Hôs©fŸ¯š³¬‹‰Tk^"VS›Bb%åû¹¿Pš™S7 ¯ßV"Öy®öº·@ ƒka³#µ»‡XS©,½R‰Öw:Ì@(âp°Ž]/ˆSÔ)Ð@@e¼Ö9úLǃ^¿-‰^O®ñcÊà‹òج°á׳-éíáÉ»¥€ò¹ª9´èîˆÝ»dK“ÐeEK½4;Þ=¥|+9ÓLc`U<ËÒù`Ƕ¦²EÊ•EB"¿•fÁyØr«’†ÖׇÑID*v£ø¾îo/¿ö½¤ÛDÑÀ<ÆXP9œ›áÜ>þŽŽzº`ŸZõÏ ¯µ¶ïÂÝ™¤—\ÜÁÄlƒ,1$\#†'FŠïl£.ÚMSð:ŽÉÊðÁxÙëÄ‘w˜!©gÇ?³õš¼êß?´ˆ ïrx˱1Æd -„z“jš¼Ñ\»ÔOH- ,NjçõU€ƒVJ ÑŠý“¸,ð²8–Gåò˜`µtTškÚL±5jÃçR/pßÎpÒé{ž€uÄõŇ‹ä\7jTß,¥<ÍuÞ¾BrÍ–Y4TÅ­¨Yµqò¾?¾ ³^»Egœó2/›ŽE«¬øð÷ˆ¼m´ßøBÇ;"ï«ÉœÈd|·SrBûù³àKè´!>Ý üZ?î Êä›>–{ͦu u›C„Í)·S¸»@¾³z.£«è&7P57ýštÙnyCßþr¥1Å)UFƒ &ž'”3¶Pm¼÷޵í‘ܱ¶ŸÍM§ûFkMbŒ¶®GØöõ§uáóyW‚v~ô¼Œt³ÆŸéÌ-Þ“td‰7ož}›ÝEeV+nÄòóÎ:xDúœÚÇ|¡šÜÞnJ­ŒÙÈx,8Elr&k|þy=¾.¨ù³æ‡åRvº¦”}’pÙ'¬sö¦ŠÁ]ŒÈ|ñ[š§í l…ÞÏÓèG%tt8ˆDúÔ;ŒsI_%õËEÛ”U°›.>¸.¯¬ŒTx¥·“_e7hd2ZÓÑ&RH î‹L3ó=«8º{oÏè!|Æ„ ÃXЧ‘!)ª/ÒîI{úSáÎ¥g¢èë»aìúnFãù®BóˆB^ð‹çÚ…ò†ïGåäk}ÆøÝr8õÈ u¸ÃbÊkD®ž,ø³…ÂY·+ Ss³Îу+õ­:²ÍÌåK<Ü0üº%Õaµ… š•…·>…øè¯´!f¡hàÊ%©Mh÷O!O ,ΜGGVAôÙÕŒª˜Ï üáÝÂdý.Ì©U6×PÈù \=1Ýɲ©/>E¦Ça¬x4¡H ÞŠ^ç¢Р3œ`-IÑHÕi#¬Näk¸+>d¡|ÁЗ¬2¬XŽ·íF^(‡:dœq>ì³ô¢*š2ºÛ˜Û^w…‘½ÒÕ.äﵦ´C=,8Êñ#2‰(ÒO­|eÜ:9·Ñç #»»|•r½yßOWŒ|˜çœºtIjo¼C>ázþ±ë5Ä‚({,ûa¯[A>֣ϸ¡˜wÐ$Ðoðpxç‹l«^ÐßQ¶~[/è|z>ë§/³ø2øÍ—H€[ÙéACV´È|Õ2 IÄñÉQNd«wÒ{6D¤YH`ÄÍ•õžÜP2S“õØTÞJpŒ8åôjß‹™S<Á×€æÉN9û1©1mª±¸Æ2!­£¶m.žZåÎ?â×nEG"§hpð-õ–çÚe XÈ#‚=Œ¸R%CK?.ç§h~Y›…P]8 â YßqH~°¦t|ˆ¿¢%ðò} %íÝX‰1÷ӻ˂5Ë™ÑÖ¾IN]í½ã£FÚHb¤’ÔjëL1»ˆ•Éoð‰c_Ìí/æV–KnZ¼0Ëâ׋¼‰Èë¥mx?êh¹Ûf"ùޫݪf,SY%Xƒåøƒ”¾<íu{—Láù‰õøGFAJ×àšèã57æŠx-™Ùv€=LÁ£’ØÚÕMá>†tŽ¿È)r}|šõ54ïî)xuÝÆ­J¾°wô9õå­ÖN–G*k‘£9&ÿ9’Ü•ÀF¼d¹×ï²ïWƦÑ*ùï% ƒ»Îü;‡Þñ’ªæâT­×¡4^¦™ç8‡£o¡§DZÓs@jCŒQ¢,i¡ÅŸçïrÔöŠVüZ×9žìœ9m‰ v­ÊÂãnGDf;PønD܉e .¤@Tšë/ÌŸQŰÏ}© ®´¸h-I=çÐÌøACÐÒ}Çàód{R3˜¢cL8ü¨ä¥oKscA!ñœÆöÇÍlIü=íP¦pú¡ wf³ÏÒ»TuÖºžVÙ úX"ÌBµáÖèÁx8yn‹¢A&À‹ælŽJJ¾5÷îʧô±ŒÄ>pfë–줇(Mi•'F”ê6¶ºð(®üq•>5sUP./[>ÂÚ‡pkÓCO5Êy#üQRØÚ»‹\·2 )O©>M ¾¢A¡¤½.ý1¥ÀržjIŒßÕ€?ÙÃeØtyÄ RŽJEìn™I@V'Æäò2õc ­El¤qßû‰â’Ä(~M»”e@W+Lï±Ä·77ýjAæ^rñk™ÉÈä$AQAD(8ó-vµÆ Cw#çD#<ì“ÕsKÄü€üSR”ýµ7¡â;aÂDSÎmë6sÀ*/·æ ëÝCf£x/Ó!ò¦‘·ŒÍ¡DŒ!²ßTÜ$¶›©˜’N¿=X~ÐÑ™´f!ëèhËc KÉÆD$¾F2þ²ŠüV´Ü÷°T޳ýÀ…ØÍÿÁêWÏn”bžkÒO¯ˆ•Ì«˜•XÅh»æˆ¶4(l-dQSÁdžúÚÉù-´[šœß$#'éV` 8U]"Œ鸶íô£Tìþ3‘ ÆŠ­wýäš,ì04Jê+Lç6ÛÐÒËhèDÒ¾&2§¢¬bt‰ WÂå(F-lEQ3ó|¨MœF(Ô§ù^­ÖWääZ‡©i– ŠzŒ’¿Õ3êYPŸQ6œ\jd¸LáõÛ{³-¼¼Ž.è>þ•#û“Àêác‡D"§êMs+hÎÂVÝê90×bô#aaR©ïv]û›‰Á¶Û|t« å_óD>|ß,Žr°ùíå»D …ÙÀÍÏT¶áÉ…}3#z¢vV9q”… :l8k­–´Db"©ƒ”Œ[b 3‘¡‡4<@,M h7ûl÷xo§ò­ƒ7–¯@¥BzŽe £ÎRqÕdÄ&Öø„+øÏô!c…ÍËI™gš©º” üþ*UT-¸FÅ„·l1,‰èõ‘ C3"œ˜Æ8®K\šÕÀñÃż€‘þ7Ï0㪞kôG+H´{—¾TÉ3¿N.s¿c ˜ô)µþAh å\ÁJA6”ÙZg|rY**^¬{cÏø¶Õ$ÆñØ ýSñÌ+¹§ò_QvÛñ£¦’cå{SQâðñç($2„ Řˆ´‰êïµIqXâ’¢Ót­Þ­0›ê±Š°ëx5¢ÎDèH"vRÞ0dawüí¦Ê˜AVWTAGñãÑýɳŽbúþ– 9òŠŠOîÛcú!%gvsOCvxl)éX‡‰T6ÊlÞçãPìB›MkÇ]ý’Àf$Œ=¡Jûò\¶{KГÐ’›t+háQkÎ(+`ð ý89î§„¨…+ ÍP1„O]†«•€bøˆâ†¶åò'<°ÚÂÎé<]òMŒš<€¼Á¹EC܇åÜõFMíŸËGÏÛ+H2Œ¥"Rý6=’ |„ÝŸ³r8³E”î—ÖJ¶ŸwôÆQÃ|? ­>€c¸ Nç¸zäTWîE¨¬äÇ̆/ ¦ïùcÆt§ HM…ª$Í£Œ… ëàw%¾¢.ëüXåŸ&fvžÒ“çhPë°íxÅ-–°ÄF' –6ç3蕯9ªˆžtFÄvBzžê\Úb×n.1¥ëžRƒ8:O â ûŠHCo#oDÈãM½Ú+øGúWæ˜-¼–y¢å8ØÓ³éûðºB>è]vÁ·D[ç?±XU¶>o }{Ÿ2ÏSª×dR3l ¡j[áûó¦Ô[(`»ÄÒËMÀ¹äŸ¼ÌŠs¸kgÓÁvêÛ'AÏ"€Éqödõ™kÀÆÖl…ùšè%ÏEíE¡.%iéáäÐMCÖjá,7ft53Rô,òÑÈ ÜÝNœÝåVBƒBŒ¬fº=Û­Ž6ÍÉv¼]rÕä9o v©MZ¦$ÝcVNˆw%v˜­»¤9¯«ÏEÄ¡66¡ §ëìÆÄ[ŒÙá+ªÛŠR,xuðó¤/8òçñPɵÎÜóÃý«î& ÒÊvhîrGåvî×7%Ùø|غ ¯™Ð%œ‘£CžÀ=š6ñ‚{êSY1²J«)©Ä}žTN=ý6d0RP÷Éä QÚÊã¾"Ü6ã`|e[< Ô«V¾£™¢ì>¾HÊéßÝTÓâLrÀ‡¬Œ5P.©¶?8(Ï.³£Î(Kwù(º åÈR(¢q¢Vû£¬ãä”C/Q…FNÛwLŠÒAdúÊ[™ûF嫯 Ní”÷h‰·ægNîʵ±÷ÂkÊWØ)#Ý$üèQÝd Ui5:!ƒŽµË|Wqêß%̓\Ö}õléã?à'WZÊSdŒåA>ÀÜ `þ ê?âz£ó|ÊH˧ˆŠÜEžê‹ç÷Û<¤§÷½ B&Ue™Ÿ°•[ŠŸ|'f6X…±¨Zê=ÅÍÙFŒP`ª–Sg”Ñ6)_g~˜Wù؉ÿsD3ªÅ:ÊZÿ§"Ú;uPÔÍgéí¥<tµÈÅDUók‡}ÑóVÙÔÌȧãÄ­ÜÁ6¬O^ÔÚ- f¿$šG\ªW“„:Õ4K¬CVý±½Goèq¢¢Wö‡~JC5ìÝæ¯:?ò‡†WwÅšs迆Ø÷wå?«:Lb làÏì­¶ì0 Ñr{E͵¹RÌÀ94·Ë„“·£Ü¤ßäù°¡=œ²)®ò«„?ëe´ž™‰£_Ù¤˜ Gö-º*Z—ˆÓ½x›ŠB96Ç­ ‘‰Øe’~ê79ÆD»³)’]çf7Ró€ ÙØœ,l ‰uá½£”ØF9œÐÛë˘ù@L®€>ˆŸ3ì6u¥~vJ^"/ê#¡<)(VŠè—fœ7j¢áÐáñâ•ð}KÊš\‹mÑß8¾u÷‡Ÿ$¿ ʨßP°«.ǯÍêrâ>`ÓˆwRèc3Ý~Å/Ù—‡#VŒ-6ºð]U„•‘ò©ëÞ9ž¬‚À–nd+ÕÝÇþ8M4$ÃbÚ¼æeµû‰ü˜ßó çZ¯¯{%‹“b¨F-Pq´$¢¸Êh ¾$×4ËWÃup+/’7Ћf+ÇÈì#:›>Y÷MÁ¯\‡Î¢:x‚Sõ¶»»¨ *v§îÎG%åй¿þäŸ(CËäæ—’U=÷@~*4~9ê÷[[Ážã>ƒp!ˆ¢cÀ‹çy¹éä‹Ë#ŠT¢Yø­Ú–8kOýà©ÒxŽc;ñ´ -Áã5$#9n±­«„€…ÛØüK©4v˜#kIQMó<þgR3V!ß)y½’©9P™07S‰§Êï‚¶=b®½e¿ü…Äjm•ï é0›z‘ѬšÂôà±ÖMçKƒ† ‰~ÍêüœM’mÚá‹´|ñZ>ÕÆ¸…©­Ý ²^ñ/€”ò—Wo3mmä9ÂøãÒÎ6£…j.¾çÑèM˜ky|ox²†²8Úè \ÉÞÕæxA`Z(•[7c´#ºœÆ] }$§È¼§â9SFØžõ†*6\£-xÌz£xæD¨‹<1…òu²²öŠÜ¹;*T¢¼^ŠsJ,¶ú é1JµÆ°ü^œ¯ÙÕ:¨ƒ6QaÇÐ’3ä‰Öèç¬S(Ì3sŵÿ;•ùl¤Ê¬\î-Îÿfr¢I endstream endobj 1206 0 obj << /Length1 2119 /Length2 16235 /Length3 0 /Length 17520 /Filter /FlateDecode >> stream xÚŒötk× §±ÍF;llÛ¶íÛnìÆ¶ÕØFc¶qcÛvòåœ=Ïûÿc|ߨcdßsiÎu]kÝ;dD Ê´‚&vF@1;[gZF:.€°¬¬$#€™Ž –ŒLÅÂÙø;,™ÐÑÉÂΖëÂŽ@C盈¡óG ¬-@ÊÅÀÈ `dãbdçb`010pþ'ÐΑ bèja¥HÙÙ`É„íì=-ÌÌ?xþó 0¦0rr²Óü´:ZÚd Í6ŒÆ†Öe;c  ³Çÿ” à1wv¶ç¢§wss£3´q¢³s4㣤¸Y8›”€N@GW  ௖r†6À·FKP1·pú—CÙÎÔÙÍÐø0X[m>R\lM€Ž€v€²¤ @Þhû¯`™Ðþ}8F:Æÿ–ûwö_…,lÿN646¶³±7´õ°°5˜ZXòb2tÎîÎ4C[“¿ ­ì>ò ] -¬ >þ–nT~tøïþœŒ-ìèœ,¬ÿê‘þ¯2Ç,jk"lgc´uv‚ýKŸˆ…#ÐøãÜ=èÿ}¹V¶vn¶^ÿA¦¶&¦µaâbO¯jkáà”ùẇ öÍ è `eà`gæ`@wcsú¿T<ì;ÿ2ôàãeog0ýhèca üø‚õr2tœ]€>^ÿtü/‚ed˜X;Œ€f¶°ª˜¦ÿÂ÷ïháÐfø?FÃ_Ÿÿ>é~L˜‰­µÇŸð¿¯˜^DYAMFúß-ÿ×)$dçð¢efÐ2±2X8ì>ÿ[GÁÐâß:þ‘+ikjø«Ø_z?ê?š]ÿ=ÿÞJÀÿ“³û] €âϤë0°2üaüÿ<ï§üÿó¿ªü¿NúÿU$æbmý·Ÿâ_ÿ?~C kG|Œ®‹óÇÈÚ},ƒíÿ Uþkwe&.6ÿ×+élø±‚¶f#MËÈBÇÀò/»…“˜…;ÐDÁÂÙØü_có/»ê_ gma T°s²øëó‘ÅÀð|[flõñqú˜Í¹ >VÎùï‹ü ?–êuˆÚÛ™üµ}L¬lCGGCØËÿ@¬/Æ55ºÿ=Ýz:[;çÀGÏ>S;GØ¿.š@/ø—é_ˆ @/ô±è…ÿ ŽÑûƒ8ô¢ÿEì z±?ˆ@/þ1è%þ >é?èƒOæúà“ýƒ>øäþ >ùÿ"Ž>…?èƒOñúàSúƒ˜ôÊлêôÁ®ö}ðiüq~0hýAÊ ÿ‹>›ÞÐÚÞü–N# óç‡\ãÿ"Ö¿ÐÇkì WOoòøQøøQÏôÏY ³¿~o>FõOÈG+ÿ€½Xþ~¶ú/dú¨nmhcdòGÛ¿õ_ƒö'åC¤ÍŸ”N—´üoûøá¶ÿÓßÇÑÙ¬¸ÝŸŽ˜>äÙÿC# €þz¦µŽævÿp„ÿÑÂö¡×ÉÚÐÉüÎò? ÿ)ï£ß@¦µîÃÿYcGÇmúû-÷±IÿÁÿnî@cØÅy;cî ˺ Ž‡A\7ÚÝIˆóÔ &ÚÉB=hçÑiýÍxå¬Ì%ér±Å~F1=Ën9!‡‡ìµ…k¯z–;ZB±3B£Øù÷»O³ ^÷xÄóH- yêÉB\%Ž ø‘È=0ü&fÊdHÞ_êú~'¸‘£—бKwÈuõÔ”fÊ`âqªl)9· «ì²Þ`ÉÙ²‰ ÜŽÒ O‘K'–æéz„w«FÞ^AéÇïô—r ؽ qFåÆaªV[ÉG|É)q=NGõ2G86ø¾N™üP'we¾su¬KD‘ØÃnnhÅxâùˆb¿‚.”ê˜[°a²œJÖ<Ä—pï¤Ö—f!ñc­r ßJ*4XÚci¶ojãÅE:ERûç`l<ï[ÅΉO#Yç7WÓж/5É(;¢Ô˜™”G>¦ùƒ¤ÖY+wÁ³êLÚ©æ*|Å+œAm~(ÌÌ®©UªˆôûCPEšw^ž,où×]]BäKÕ‘¶ßP£<7êW¼Ó óžÎéGŒÓj£„=Ýl6KÝ7ue†lìŠ|*=;lXO7P¢£ì¸„ÙeGÝAß°éÚ‰+—·ûÃn *@cM@Jår¿?ÝøcN Úu€0ú–úG={¾ƒ¦ä`í9ÄWTû7Úé#Óy=€áó¼>ì®5‹§Úáõ­ÒõF7¾þ7 @u=¨§wr\’º]3ç8eôPZ†PˆrôºóϘ«\½(£øô ϱVhC¸±`}!Èí#4Ô•çÁÉ'Æsê©%”™OH'êuL£öv™"Ï™ßÃÁºÜùFM$ꟴ uUDïz-Ó•†#|驟ávv0é©È«Ö;ž+ñöu79YDj÷+þ&MDM~Ü&,ù*EH‹¬\4ÛO®è$ÆÒ1T+óÜÔž?1 4¢ªQ=¬X…Š3ën|†ƒFl»Œß$ŸZ'¥‘Ƀù¿æîãxÃŽL[›x.,¥_¢gH­Z¬ïÖÈôolHu‘Ó8·iûsw±¬ eƾ~^yLUù©ÀèõËí3ºmnxô\¶Ø’—‘Jçx‡)dÈÖin¥W¸Ìô1yXOì¨FçöhñÆÓýYã:¿?ÚÒNƒJîïa»3%·ô™M.ØP‚ `ë9,ýLxÛ>^/6¦Çói ¢OPn¨óÞ’F~`1»ß•ƒsІé“OêÞT"eM¸²ÒŒF’*O¦S“e’¼^Çf`2Y|ŒjV[ð†ßì7úÜŠê2a»õ]†I² Ÿ<ûe,“}/sL¾Ô(=7‘â  â b?Ø‘¡…‰æ”Þ†@w#?´=¼37^¿Ð@« >ðù™`èælЏRÚøpOö†ïeäEÅnŠ· ­edìÉ£Ðo‘Ä ’4MuϰدÎ/‹U‘I‹™ ;«w˜GS|Ê‹ñáÝXM§ŒBßQ–ø!Ü9ØÄÏ/pµ\î8„IרÂpóŽåú÷Â1­ÝÕc¹Ú\ªWBz±Ö[çæ·f¸ZãgÙãfªÆþWVºò"Îb¬šb6ÃŽD æaºO,[“t Ù¾Z æd{Ôò8} [ïX8Õ•P|Øà›õŸ[üšÆÏ–„æ·šApwWÔN4¿1ZÒ â #t"ŠFO+E%#gîú!ÄCË–þ,+¸9œ;–ÊH–Ç´›õú•wKAª ³éPÅòÚ:Šâ}î1ÿEU a{£ƒ î‡>aNà!¹˜6E$lþKðcìc1ÿ$ö7GˆÓÔŽ6ý›ª`(”iSyhõµ_ Û¥9¥. «÷q߬èã«È«YoáG¦Kç~Ãø×Ò®Ëhªi•°hdk3¸Œ[bò‰ÎZÕùÕi ôÈÄv5=ä Å©¦ÔÜeldC­ŸT$ð†m§ß<2úªƒƒï/NÁ‚à+™vÁÌ„“Þº„€jÝ´=\ÏVÿU¹*ò¤Ï‰âsªŒ!tôœ ÜCS’ŸŽ~Šy&’wù©þ¦—³^0eswØÈŇñ€­só©  ¯§"{Z6J²J¨~Ѭõ°sÿÕdYu–â^P§Ü™ ¦ãÑHi‹Åß–­v Õ„CðIM8Œkeœ«é¹2nšZ뇚²`*IµªmŠÃ *‹ŠÉÌøºàÚËð”i øcø¡á®çgÖ=¬)¶e>µþtnÏ%;WE=;9€éÁùn#0M…ù«‚λ,Ú Z¤.oF»”<ß…T#qh¿‡h(I@ ­ãYøú™~z† HÔR Â+‹1üšqsÙbå[ùÏ©²('„¾ÅŽo[OtŽkÐ5`×¢Úe´`¯Í'·ˆ¥þžÉ»1ŽUHGÓ¤EBåp2 ô±û\-B˜·€ùµr?qÜìéIF6]'Øø›$ïô¶ŠZL–œõŠÃ ¡ºWZ«ŽöÖìÁd«¢Í›çvi‚*›ÈU5ýBÁ/{ =Zm3=¨Ð4¤J@›Ym°Êo=ßì}Ç.ª.Âá 5V_9l=o÷3ÁMºä¸‰wÒ|±!§âK»ì×;îR0Zp„Å‹ýä~åÔD÷¯{s¤¡ÎØ{×ïg‡ vº,¹èá@±@´êcüÞßT‹É¨žØpu~_7 ím&,ÅñŒí*D‘ÚƒYVúõ ºõ9S[”®YTJ•Ïf7¿Ì:U‹Æ.œ4Û²,ƒ}òau~8KA>¤ÑÊlîÚGa¼,€ýÛði`›ÀkÁ[Ôjy³'_"– 5Š–Ç‹I|³¡\ÇZ+d†¨p^WڵȰ&e s·"zNãòã<Üן¤m÷±ò•™Ø?­ø0&ÎÛ¯÷Ýü÷¥UuF« ‡ÑL܃€“Öƒ»ø;]\4Ò1¶ü}HºVä™eõ¶ºÊJÇ/RÃóÀÏJË5ON¦‰ …¿ulüŒ­íj©÷¾B‡Žï­ƒûõŠ…GÒW9\÷‘‡¼j Kd Φ‚;vê,7ýyßzVÚ¸Æo¶9š`ÙóŸüœ­ªÎ4žÄ€¬-›oU‡¸³™½¶‚ÌœÌ%D¦XÔ•ÝÁY@A‚AF¿[‰Õ󯜚“Oªµ^ýù˃ï¦TÏ“U4ÊÇ“ô-`ÌøtaÌJ9Â>¦SðÔ¼ÄÑ .¸3ÌBj"áÍ*²£u\\Ô|–ü€#0P€¶Q…k”µ-ÀI”j§# “`¨’¢«ä w‚äÙ]ýå3Uï½*w­èÔçÝà»v£­ÕnÖêæî—N¦Ä.¾ï'ÒîÌ}E#úÎ%ø•‡±¿¼§ÔÈ Æy÷DãªÛéΙô6닸r(ð%ø*€K ã«õ³ÜÕ÷¿‡ò‚|lÔ3i/e7'= œŒ|b³£_ûœZÐõœ:èAS²·ÅºƒäãE|O±>‹\3×70útgHÀQ˜ÞLJ±v5¬§ÊŒVíÞ0{{¾}- Aüýݵ;²åÖò äjÎÓʘ þLó+]©W—î.·SUpg¿uwC1:êΈBÑý º`ùˆÖ™1ú7ýgú¡8#ž¤„•W«gú]¯uÈéD»ŒÉ\´ ˜‰A°í“"q2”pûÉŽ‘ãÁfÙK®™¤'ÛפÆÊ~Ǹ¬DåñÙm I[KÁDÉM¾;"03$Üð_ó®Þ¯ÀñsôŽjxÍ„/òãüWùŽ<¡¸¿éë&t8úM ÕáôÎ/p}×lÂeìâfÑ­©#¸\HB¼œ¤·P—CÇØ¤TÍlq·OÃæŽH·D0„À îƒ1D¿iõºRß{ñ7ÑÔÍIÂ5Ʀ¢oî5jåðqã-Õß+‘çí÷Í å>¹yè®Ïëd®819Øœ½ñgÓý.’nzºãöº½Uie @éÉùS"—>‹¼Ùeu¼Ño²áÞ+i.Ê;XV¤¯ëP‰ïñAh;“ x>Í`ZÅ©"A( O{;І©I‹7vyõhUUò·Ú‹ýø¤q4÷û„wHw‡†Âl®ZçÅ¡çÚÔ‘—kgtŸœ3UÎøeº12ˆHZíøçx8}ng«Ù5ÚŒ¬#|²’’&±ÒÇó4ø‡ÕӺϟÀås(ªBœFLkÉ(Vží'E–%ˆ™È!Rií#à¤Ï}k¶o˜‰x]D¯S )ŽEx¸ë-kúG›ŸÖ%w™œÐñó›ÖŸÌBÄ&䔇"Œ™f_ÚQéBV·Ùç„£õ„…r7#jÐyWc§ ’¯Ð3­*)˜tW»Ó䀸YÒ‰ õø'ü%ÓöŒÉ÷—pzßR¯Ñ1P |•ß y¥WßùE÷¤q32È멯à uH™`Hµ¢èÝçí™»@Ž·4Uó*!©@ re÷‚p• ªƒCv±TöNðx¢EwÖV%F¶ŠÔ×ãÜJqQ¶ÙñáL?Cª1ƒ›|Ú¤K«©’|çø¼•d/ÊÕå6š•=…)jŒ —ÓWÑÇ+y{^"5dp1’¨A©ä~¾ ÖïÃ:E·d^JÝ&"s”³È0 jÜèÛÛŠ)U¿Òrî_ÄåŽ98lî!½Úð&ÆÍ£ùžó+øÅ·Ïûê{ó:Ì, Ú ½c÷k1aõ¹`¿ÑQÇPAÃóŽu™µç Cº¡¯Ó~‚ˆ‚°‹´NÓêÕ¿(É¥’íô}ñѦÉjÎM¼€rî“·åû„8.$ºMâ´«*¿¥ßXò¹naÆkáYRûE|ÅÖÚ¡ø¯!”ÞætÒIÙ»MHtLzY|ïšæn’^¶Ïƒ qÎh“V£ù´€×½®¨m"r áw±þÞï{ò+uJõ´<çnˆ Ï8vžܦ‡ ¯»~TïwUˆö˜žõ<6yèPK¡¥mþ`þ ý]ˆöo qxÚÑ7"‰‹ÝP6êÅú$ñF‘†ïÉÞn”(’H•}††Þ†ƒN´tRY*öÄÌÂä{§˜[3ôÁ =Évôw1ÎSŸáÜá’®o©Ç1©Ø›Î%~ê?(òÜ`3º:Éûµª|ª_¶šcM1ÑpzJ–ˆ® 4±R·gßuðPšæ"Øt‡ã½¡Ít ÿ‰îS£Ùzæiœ6{Sý“–ÒôÒFm~¢B&=y[Ý,²ìÓ›ã$/}-R79£˜Š¨îesÞz‰2¹l‹Ç·MáÂD£Çí–âoÔ0‚nÒ°÷¼Ê¸L˜Q¶|kuÇPH–·ÙQýϺ*ai¾_R]«ñŸù=`-7‚en&~í…Kõ¦­1–AºiPGÉ9óôFAÍ|Ç•yúÂ>[T)N­Õ3–#U»Ñ}ÄÛME>î¯ÂþÃ÷kh,IêôÆ`·uÒBŒ&ºÎs©çæâÞ\¼| ËoïF»T˜¼ÞÎQ¸4ÆÓ ¨ ÖÍç5 NfÁ5©ÞA}ž"]ßÑý2¯î¶_æäªRÑeÀæ¸tt%“@Î¥®Ñß‘Ø6+/l”1á‹ •†Ê@xfžÓ9S–ãâÈ+Àüb~X¼­Ê¿F¹3«dD6õ¼dÕì—zÀÁ†°Ý?äK™ #û½lHÃu‚žxlÓÛ*­”ˆCJ½&õ½K®e#`è¶7AöÖŽÄÜ~Jå¬ÿj÷­R._ÕäÌtéÉ0k˜yÇÁy›·$«K¯¢BÁý|¥ÁeYŠ¢âPÓ!Å Ô=K+vR½^IàZPºìzµ]>4«8•ÿ„’˜l)ÂFŸßÛܸÙvô‘}éÒ:¨-ØHë #’IEakÜ©tÿ1ª¶ ¬G‹LƒPOiŸÀœ°Q¶C"õã ØÉØ'QŒ¦AÉÖs¶šgI•^ÒÐoo“‹¡g Ÿ$’í-Z÷ÞՌͳu±­É—×óÄúV¹Z Ë’’ G@‰p•‚D¢€“Q‚B¡bogȺ'¼ëˤ<ñãý0A¥zâ g8gÒew§8ic±‡«Ràè Â£weÅÏv3⹮וQ a8§zh’>MZ nàÒÑ.Ù•Ïļ ãTá 'ç úY"ŸNéøâ(QcºöÙ%‹¥-™…¬C¿yø?å¢-{Ûæ$Pò1&çÕ”@é?z›»FаÖc(8“|¹ Ùíj §û$ž/z­,õS},i¼ü³‚ ¸ÖÖ”cðãÖ6шÝi æI!qN Æ«ØtíÃe.8©ž&âf­·E @©lPœõEÞìhBØÖÓª‚é'ð­pJw6€ ÓþÚ˜<)ꓤ”-o'}¾´'ÆÔû¤ìxóü—/µQ%r3;ÄfIÃòTîåש¾ß#û[¶’]ú›Péi½pðÞð¤î¦þù„?:§»òªŸMðoÄçoÙÝá,Uï8ªá•„gºù “¾Âhpþøö²ÚEÝÙ¨ø1e}3 ÞM=ó5:Qê°1 ð:ͺ}…Ð1Ï~,³ô˜Ji¤aV§Îh®|º=„å7Š4ŒÛ]“ß*Þý¦8 ñ±à»ò©h иäº)» žÑ %òk¬^ò}ÙDñû01bD`ÓNáÖÏ ¶ÏŽ5Wݜџ8¹RgV[Ù”%.\¿aVÐK¤*è¤óòJZB—6ôš(ëÕ]F}¢H ƒÌÏ] ÃóÔHpXTtƒL¢7èÂ2ð¤ñKñÎw9bÀû/hÙ.}:?'ØŠÓZ¤Í_ó­ZøÁ'iµÅ÷ÒlPO>™ï‚´Â1º§òKÝÞ¾`~‘vû\ݳO??UÙ9ßöÊKpqkôÓìøk]Ö¸L=ú î±\WºM[„ZÊ3Éy­7ò¸î>zÊÄÕP€Œ† NIJm==~¹¿4š‹PõaT‚´ýí¾þ©Dùó7t*<ÅýJõY¬•jxI-ÀwÝàÓÄNP&Bo$ޱ&ó†‘1> ©ñ!”øO45@‚)Ûú*1‚eï!…C‘·XXÝ-MYÁÎ÷*ÝûŠ®Ø­Þ|ŒXÈø½YJ±ƒUUQ ú8F%ßàÒ« ®vÈ~v«ÝDÊ⛎ØÊI•5½úlÈöÑÇÇ,äLÂhWò ¿VXY·«73^S³E‰Àb,²³J©íA+qºŸd©'~ûI¢×6Ë­<Åÿj/YŸ¹<RàÒcCž²ÞL4T\xøihqâ&]*Õ˜À„ÆÜòé fÿÍà¶”z ž}:¬öÇ ÝØt½ÆÄ‰WöK–›6ÙNÁêYVÔÑÐû]:ÁÑYjU2³ÑÜw@ÀÌc|÷(Ò…U z¡ü¬A1<Õ%n+-Bx¿¶ºê[AKߤVˆ›§ÒÀÝïcQiÈjψM¦ÑX[Úbƒôibÿ=x¸ÍòçÄE]¢!HÚûq;y÷wÕ9*ÌA²¬ž1WÝ8¡AJtùd[÷BC?Îe#9µ¤öÓ¸ws´/–9VqÌE%cX5°ã±6s›ºÐéM(Ÿ¿¦Ä't%¿7Ö *ãþìšsë½4¹JãRËÈÀÝd‹šhÊÕK¥ä0Ÿ$a6šˆ(#^§¦*g*OEK*aŠm1«ñLeEë°O|îw½A:DâRòyî†ë3ç‚t»>³GG×Ä´TȺ Ž)TÓʼnË™S”ÊÒo$rw¤A_d™MÚRšCRCzû¹r5‚Bz¥Tpú²¿÷­Y@0f£z§ìa%OÎUs!Ã68zœÏ¯Š}ÊÃmâFT©á7:kiŸìâ^‰ŠÕF‰÷……Ý{pR\G«=A7VÖ¨¸ÄŸ%:ÏeËôbë¤sákW˜ÓU ¼ç»ätj5 v¾¹ä ƒvžsq= ¼n‹Å“tV‹–²n‰È¯z øç[ kÎò“ülY-w˜Ï)/¨ædÙˆœ‹žOG5¹xÊ„£ß8À>Q”’#«fäÉ£<Ë% AAöÙ´7AúÑ•ü…™‘ “˜Ôì ƒ(×Uß}À0}ž¼¥¹H¥]ÕY­[ºÞŸE;ÛŸha}½ÑYJI|ÕÛ õ $ õL[ãíHs}ïty"þF_‹¶Ú9®W[¨Î»‚Á, £}‚â}vÂ!‹,W.絇‰ã§8Lm¸ºÁP/M€/rZñ¸1ixGs'$W[þX¼_‰e^8¾ë:µ…S_dKÆŽ¬=NH¥™)äA $d­ºû'²àúãHâ‚E§ðŒŒ¡ÎÇËl¬ð×WÓ†ò¯K‡éáäôKNE9:Çv ¦òbãJ»+ÇnEðLiz”,y‰Pll½Wð-™*U/˜5¹`'áúl¢è¹¦•¦uLc0¥dÝï]öÍé §•ù¾1°9R%£¿£Ï”6ëƒGG,]+‚ŠÍ§•ëÚqª=9Ú )s ݵָ½×Ì0 %Ñæ]eÅ­),ÔŸ£KQ8‹­¨†kyƒ¤Dh@Ó39ê¤ÊPŠZÅ.(ß…Á ÷úS_@o -æC|{À·œØõ¤ŒK¹¦=%9s¶ {ñ™´AXÜþ>c`.ß«KN&\+…ªkùy¨z+ôcs?&ÙøB‘˜µe²âÕWìFwOQ°Ã.Cë6s¨V6„ ù³šÀ‰o„VTnô~8»¿¦í¯œÐJepa¡k\ØyÜõR_éX½úöºnyë ¤/@ì[!„X7 ^ŒiÐß|À–'+èý":~u„±(µöÊv½%~~!ŒÉè#Û0βÓ3ÒŽ7îベC9ÁÊþ£ŸöÓâk­Ë­Ô¸î¨y Kg8Æ¡Ñî*™SË·µK«ú¿ä܉dõô :)[Ò zÜ«j÷³:6}Ë~Æ!âÙ»SÐ;Ë×. !"E\’h-åã—ú=r;s§Ÿdi)'ò&öŠ·º‹…ÛKêy5u¿ûìvp" fŠp˜ú”ƒþJëœ .:­•|0Q˜´¶/OhY>Jo¿Ç:¾Žý}æ2£z”¦‚¯[åecØ—ª—ÓÓÈÅF\Ú¢‘©ô MÑtÌt*üuà^C{0žÿZ4s‘ÁÚle&ü«¹kaÙÜü.sÆ7ö°Â¡mPÉ„œÏ”£98_Ó=r¾µ])½6„úÎI_ ØiÚ :9)Öîæ©i.ª®åx8ú®â¥˜fÒm8ç-¸µU²Y¥ð„ïýR˜à°Ã8‚á¯7Hî f”_ä!wÐÉ9vØ…O;p磗ϵ<ƒ‘È… u5dœ=î!ˆ¡GÁ|ðÕ3Æ©7›AŒ·‡Â£ÑE!Œ‡>óŽôúcbd‰ÒÄòC8LS¾TŒö“ÒY­ë ‰Lùtí±ší;¯Á3-o7dX mÝÞN•Ù‹[Õ½p”ùÙ © Ó{s…l¯0Y¸˜ãæ×>ŠÚ$KU¾^­×ýjÂ@Ž3‘£“Ç‚uÇÝ84ûØÀոи‰ûµÍ²Õ¨|Ï}´”.ë·–²«Gƒ·T'JšÀ¾q„ƒÊã´ÎU^‰K=)&#¶ [„¼•üûx»­pïhR2 ëÛûêZ¥2îÂwˆs‡"+jØû¸øÀ¨)^¹88íB§”„-ÿ“¬Ÿ“¯ÞõQ?‘aAœ¶(c·4² à¾ÍÏóÇîYH…å=¬˜¨ÒšÚ6Þ,ÐÈn‘‹VQDÄ=’oˆC‰[êæµ QŸ›ˆêý…÷ƒÈYÈoÈW$y@5Îs¢C¼›!‘g‚wÂàF›,™c\K ùÊÌÐà|ÔÒüñnb舿´åì&Ê3*‡.gˆøká!Ñ„Lí9\¼kèÚda]Æó‘.{ÐÀêwÚívÕT†YU׺SCØo%­Îjbêõù‘Q ¡VLR»%jNÀ<-,µÌ<ïö»ØwÃ{ÞQÒžšg$°ÕX?f>RkÐØq*ùWë™ü%tÃ-b~zëhgÞ8ijç„MEí4n§…¾LѸÉK]®à“nM„áš8…#Ë:¸5UNæi¡ßðŽBã&¨/òØÂ10^OAUº1I¹¦»?[i̱€Q¥äE²+Ô0Y‘u(ÀEXíèÆ:ñ†,o‰‹Q@œÌ½‚ä­Â$k'’¶æÊ¦ €õ ’ Mñ¨\_׈¢9o‹'ÞÕBJ'Ç+„}i‚àoŠ›Ôh  èì¿‹E4¾d¹8a„¿Îf°åÓߊ¨¨hëN;%¡7õñŒ ÅiWIŽÞ=¹cÓ¿yìЩvð%½3ØòŠ3ìŒÑÙçW9sàíÞóP2Áø”)…‹kÿ¹+»S"o«EÙ¨HÅ$õ*¦/æ¸jâ¢øæãš—ôõk%í@†ë‹¹ä‰•Sð]T8Rµà»aYý‘w¨¶àȃ°W®-ö<Myp|žÖõžycmdf·X5=§¬l9X¸íû¾7ïqˆ'¢ Ü1jm1fŸT “‚ì—çuý1Ýõ¿¦Ïù‘÷=7Í_„5õ•QŠˆ;»‘Ì'¹ç°Fy 6l.÷/AÎ)xZnó‰jçîoð’õ«]¸¯ Ÿq ”DÊtׇ¥R$D‰ ?Ÿje»Rv±t­í¤‚.†± ‚oóEšOV”CÒjr·ÒQL¿¶87-°¸jÕ™KÜ¥k>è0Ù»V ÂMþ””•&ûÓ³ÚméÁ d2éªè ^ß`ƒN$/ÝO²-ª¯ý–qS©§p°=fÖĂ֛öJf8O±-‘'0«:?.¡¿làÂI=Úš²jÓ€º¦@ ~Ékæ%½{€K’U,¶‡ží+ž)¹¶àô†.ä=Ä£pt`¡Ï€Ë”ݯÂ,™Øh¿oÁáÄÆ® °‹ÍÓ”mB­toÁ (U9Àd[rY-©‹êÊjZCÛ•™½Áà#G2j§ÄÛ–€ 3{?*h/ée,&ç°œú *9»ÿÆ Š´^\ûdŒ[¨­©ÇôNÑÇ Ù]È 3tk^1ׄ柈Hí˜;ƒÏj¶3^}Å9ó²[4®ÿF1Cßš&ÙæYO‡×'xÞÙéPV“§º.߉ûixþ§1‹à­”bÂp-.¦Ñî°¨ô|ë‹^«Fªrd3æ¾e×Ô˜+y•È»ƒ1OràéÐ ßj„ˆÚoQÍ·w$åÉÐú§&Ÿ;z ŒB´†¼^àºÑFFW$šïä†íÔx t¿3ÔÒîw%á‹AÓ;¼¬*ž¼if›)FÞ;—ÖÕÞÞñDÜLÌò'>‘ƒ¸Ã–=SÂ)E@ÛMK‚5‰º‡SÕ—ˆ±"Ú÷®Š ¸w)páÌåøû‚àåŠbR‡%:ï«i¸Ö•ÆŽ¶ÄÂJ¶]0Sø˜"_/7 §´Í=7áí˜wo˜::§ïxˆÀB$ælþ\z$À•˜Âè´†b‰R÷vT×f = CßÒ÷£C†É'‹˜ºÙ`½º}ù±‚rê% ¢ß2°Ä1÷Ê2U5—¢£/ûL®5²KÇ1ºFVSè7OØÔà­H¶ñ»)[„ho¦w³ÿçä~׳Ò#Õy3—•Œ+v;ð¡‰Ef—YºBÇ91¹A¹jÖ‚1Œpe¤+í¢öõ×|üÙÁP£IRõ“7ËR /ÞªbFŽ[n¦Û¸jæŽY'¾$ŽB]8ú\• ÷³ZH1’ïKa4u#HqXo² Ò1 £äóLW¡ÝÂðWX¯¾]»P‚”±/b–$Wz—æsÐA±­Ú:GPê!•…_£Nq²®r§}+ÊóèWÞšÈjĨÛíõ,Ïú+Z±cÍÑX?}ùZAÞ\H#Ð#l&šUK½_v¨ˆ3~ŠZйº9Ð*¢5—. ýuö¸y®PàêÄO'$NÕxV³´ÿ2Á–ãöP8Ø}aŽ}ñõõ~A¡J7~’‚ñ€Êì"ÄTG<¨Ê(í.(£¼ø<=Ò’EâRݼÃöÆo…Ê7\'$¥؛-AÇÌ9Úƒ™¯×·bRÁÃàhn—rg1äê;Ƈ;BÝNîðµQÜ&‰+#ó˜Œuö]ÞÆ³O[DGG©ÿÜ,B+€n¢†ßBy&äräβvªò[é:-ŠA0qëà{–*tø r´fب4_]˜Rd×Ì+ý”¸3~d)ªyäÕ”z¾¦!,~–E›^0Lv`lû&ü¢'%ÝåÏÊýw¢é$¦ehs©™diMÂC\úÉ܉ót‹ºd„&?ba¾z †š# ¹’¤|ƒ“7MÍ+´Ç=Ø#cdYÉóêc©[üxƘ]E€-rqï–ÏXçx dm”›rŒ9áè…vðoè± Æ±æ'ÕëGÈæp¡€%9Í–6“ÎÆ~”y.¨Z"yÑÑÜ 2¨—˜$ò2kN$©–‘ª™Hœ±Õ±Ä³ÌÙOû}‡K¥'%T %£þ­‚·ªæÒŒ4?5æíùÅœƒ™ åQ¶ ·H¡[*v]Àê(í—¤^VŸ(—29‡d 6)H­Šá8‡;BFöýoË^ÜQ/ˆJ<¯¯!¹Nœ[T¡/P‹ú"ÕªsƒæÞÏê<±BAÇ„h‘1).XߴĺÂ[f€ð¸u末HšØ‡È’;]Ý€ZÇì $‡¨%ëÄcŸ°úÊ~SòTšðdµ1Šæ?ÚÐéÇ™ ŒÈ·Rƒ¦Ò{Ì´·eû >-±EvÄÉŒî}È?ŠèA<}«Ätí6뿪sÊLÿ¤Ê XLEÊe終‘´ÌlÎËb×Ç#Eq¶KÓ±'²[L±`ìQà`I)÷5,1HMÖàí*ÂðUèRdZ£b°ìó›“<ºDµƒàÏSº:—cã¿Ãa ‹Ñj œ úpáâQr“5·B!‚›tðˆù– ÚmÛîxB¡Šó *¤ã×ZãN¡sea ʼn‘E\J>vž:0x,®üNú´¾ªê½³ª[º†¢|îEoô¬?ûX¸Ò#âÌɸ־WåvÅÂÕmÎá‹Ëç”g¡ì‡$ Ú ò<þ‹cö·û¦ºð>’Â<× Ù™¹Ð݃²•aÜ m–×¹¥› Ðìj–üZ6–Û Â¦ň\ê\<+êZæÍGÔdy’‰¬ÿL§0Å—ÌÀΗzmc¿•¤‘þž¹ì‚HÐûÎtbß/¸ÆÎÀ®4+”'Jí†sįŠ`'¹³¤É(øÙdt¿ÞÊg:ÏcÉzÜùU£B§g•£Ê7êdûпÅëeŸÇ›‰n¤nŸƒBöè`I^Þ{‡:ÀwÞUbàø—D8ïhVÔl«x:Fuè°³å—r‹‚ §zúÚw÷UÊ^ñÄŒ~Zå6Í(’Õ‘³iE>£]íAƉú¡_4¾Ú¼®j–ØàX)Z®ñR§4äÙº*Ø3¶<{sz©ëo bËEh‰ôz˜Z&ÿÚìº5-úeþ~ÚŽ¾ýÂ(žŸÑfë¾áu}ÖLkY*tÁqë!+Z.=RcÅ)è†x™=ÙñΖKÎ'LÈ£Ú£dÂL7ip_|«Éx˿ّ³ÓŸëï?ÊóÛ,~ä\åKõ3 D(tq!kwþZ‚­*DÄp£Þ¾ï˜n‚Ö°ZåéõD°=bÄ[›Tu•¸:+–Ü|ƒ1Ц¢Z¨öÕLô®04QÎW?­Lå‡ïqîðÛ¡àQ¾>Æ ¨«ºxÎèG ƒ×í¶•ŠfzÚÎ+ 'Ä¥?2Ý™};·`aíűížB3·Sé’ë~ ï9Á˜#7„.Šfí/`ë°cè>4»â7^'VIÜDŒØ»©™Ä(^pLsëú {Ê¿Phy¤FØ¥@2„!qP(o%žÃª5MÚH, ¾Ú&áÿýÀÐv LRl]„×ÃȪÞ-´È_âî©“ŸT¸öÆ€êg/y5ñE8ÔÌ ~Äoíò‡Çºž™Š¶v,Y±3¿ª <ýVÇr© ®!cQ*¹Çër¼wÇ ¦lÇD>btê“}òwÜ“Ö,Á^‘|‰¯ØPo`Ö´Kèn¸£=¯…‘Sm…ùçÀo¸ç»/ß :šº¦Xf±¬} ªÊªÁ‚Ö²S.@ –E˜‘'ö=wï?ù‰PŒL«>eìzÁ?¸–ÿ*Q‘gBÌÞ*r¨¥Ìzœ}w"ÜbÖ82° H–ÝÚvôÀÆÎÌ0 ÝPoM%ä™G¬ôn0d«a‚!›¥‰{¯‹X­É½ràô¯wEY¢h˜!eOÙÌ ØÜTž€u|žøâÐ 1Ôù¨îcÈÎ-˜öÕUˆ-Úª'Ó»žìvàíÈò|è#Ûèvøí†ê)ép”¡‰,ºO)È/žéF2SRŽt_Ìþ–[Yvøv-/²\. §EaðÝR²Ë™›Û\Å€á‡~•1Nâ]NY¾¥Ý• vo³ óegŠêf@x3Ìë4*•åPBúüfkùÙf ±Œ¦8Ý€Õ¸Ë}ýw˜ŠEu9ü®ý%ÉDmþŽb,qozïr¾ìJsðòÉ)¬˜$‰‚CLPû&ÍÈãˆM(?“eûpŠq€Ò¥CäþÈKˆÙÃ0|u/¶ýÓ,åaKMü~ Ëq{íËú‘ˆ«Ì±¥Êw$ûj¿º¡ÎGû_>k/ã‹mÇYWÔ“{pÊVÓ%ƒ!/ŠÒÈŽßè¸_±‘'½+ëú|iVž·±¼ælñ~GBÛÒí…VV.ÖÙ¹ó¶ÜRóŽ: ß•ÀT«äØ óñÿY$Ö1ùªé~z0¥‰²NóÕ¹ïk? érz;2NLBø­»užÞ8¼a Á×j^^rMˆe¸lÊ`z¿Ï§ycÀ³ö¬ ››“ÛÈ-- ä࣡SÔèå›4Òü¦/ò¯Ä=2|h‰ Z…ØÊщìõÚï}L@¾7 è`ËÕ*Øyg¹šI)Öf|o„§}eà@· Tö6×`¹x×ÃÒµfšßÕÌNL»fﯻ¤ããR?@´ Ž8²Ê¿”áiêbím èVÂØ|‹6=ÃEæÜ>øÎIÃqãÛwv“Í™]EÓo§ÑùÌQ/ õKaïlJIßd˜·pqe׬s¿yä¥@OÕöM /µ’ž¥²Ü¾7w#Z Ù\÷·x.Aý2ËerãwŽ7W¡èŸfÆz{Œ”üòöòä׈ä5Ôò…½tK·j;¸Ù Smg¿ßÔ¿] kGŽªÞjÐn(rÐVÆÜýh=lˆ ‹›Ç>0*=(í M¥xú•évÄ{¥}RARŸY‘âÁ«(¢%1òßaL¬Nb¨£Ÿ~@bÄÒ|Ã}eªì̘8k¶öæU¦HåM´ë,!Cùþ ›»^Åp,,ŒÄÁÃÉœQ ­?çD;ñt>®TNêìÁž屹ºN.gH›Y,PMß5MùŠô³€îô5æéÆ\°Â§-]3ôgxáÖÍÙ˜xfgáîùÌ ¢(K†Wî8߯¥^6æ9‘>¸Ò<³©tf„ùË`Ò{Ôêm>h-”zB˪:m~ÞÙåí}¶Xa'VÐ ½Ö!xšÊß2f"ÈŒ_:ÍÊq?k§h÷˶$z_‹ÐŒz]ôf<ë2Úl‘`øüx^/ÒVþµ>tÛÒI¹và0^µø:"Îñà1Ä-ú^&X&È6ÏlÌP±­?©ô%;Zª<í„UÎg~[Ÿ‰ÊK¨XÇ`®]?X®ŽÆýQ#B¥™×6Ô‡ø¾âÇ8Æì'ê›nÉn΀Ÿíì|Aê¯_Üì•Ø¡jÃ(Bá ¹è¾’.ZåobÌ€”…&YÎ2Rw)lñÙ0ÓüòOXÝ£Aø“ØÅÈÛªkì©Ø”—üv {¦ì ¾àzZy2zè×î k"ñäó¤úʦ6¹z_|îú(grŒHí—³Èä{Í1%i⇦}}\{¢n#Ï2®½—¿µÊÏ[IEäë'h¶Vsx]:-»/ù©˜áøŽSÛɧ­ñ%PX~ᛞ/õNà6] Bê >¤ªõö’ø…¾6„‚Æ1굕ÖÈcôÏ}××shVsÁZkkó·\‹®˜§»Txœ\$ýz!å¼ÁDå ´’Ô$äÏS[¹ÖÿOô ýuz4,‡þߘj‚Øp32í$\LØñÉDžJ2mûþ)+j‰uºR~B!-ÙD®y¡^ŠNmm†+ƒ¢AFàÚ=¸bièÉœôÏlHÇþM©D>v–¾DUjßgóÂ]Ëð‰!gg¢9D³¤LÅáÝîÎb<  3‡ç¯ˆ¸2 ¡¡y‚3eþ dW™Y™æyèå&çÉ(NËXÁù ÂMĈÀH—¢<2úkzÉÎæûÞ×Ö’{¸¹š>;£Ë† aÎ ,%*úЃ¹ÃáÚb×C~¥Üô|¹7Â^È$€Ž~Jõµÿ¸ý\{˜²æjït], ͺ/½.2÷Ú‚Ápôç6 WøÝ®R¥7»Ù :¯9÷rHjHBÑÇè¶:Ówvý#+’ID*/ó–ÁSXÖv DZ3ó~;ÜÞ™Ô°nô7ç[,.††7Zl¤ƒLø{àä’¥ïª41€›zŒ½¼n]Œ kiPX¶O°y±]Ò‰¿-Õ,F4Úó‡ø#fˆl\%8FÍ9Œ4H (nÏsÎNÿ™*s*¸»ÕAC¸ýI—ÄÅñž £þÏŠ°”¯Ö0Îko“ 4°ž°ÆWÅdÆeJ—áHÖo™…\&ÁŽêÌÍcàVîâKÒ3&LžÙe vi®¯‡!I ª¢² …K¼»ÀÇjEs2å¦Ò\Þ]ˆBù•ÓË>Ž0ú>?~önñ“Éœ¥n‚ìð¯Ûþ«÷ \ZÊÛ-o.Ü2zdz ¤ÁÏçDÙ´4¦Œ¤lç ‰µycÀœ¿÷ÖCŸuÐ39ï^ƒÔõ»Êøš¾ƒ}4º Yìõ ^T{ßi™ÅÃÉM¶d\)åRŠgÛîuu‡/¸mt–¢ýVùþDºÛ{¿³ŽÊŽ矫 `~…nlŒÛF'Q¯²‘i[!ˆà¯™œžPq¼¬×ž²Iñ%Ò÷RΙRo‚¶åàÝÒ¶öORÎ×G\ endstream endobj 1208 0 obj << /Length1 1487 /Length2 7401 /Length3 0 /Length 8407 /Filter /FlateDecode >> stream xÚuTÔoÓ6!©4Ò±¤4,Ý"]ÒȲ»À"ì»4H·€ÒH7R‚€€¢ ]"ÝH¿«þã}žï;çûΞ³û›™kæžëžk~ËÁ¢oįAØAÕp?P@H ¢££  ‰ rpÃPÎпý„¡îH.ý¿*îP íS¡Ð@ðÀÃÅ¥ÒBBa!!©¿wi€*Èè àP$!‡ ÂÕÇæàˆBŸó÷#€ Ì JIIðýN(¹@Ýa` B9B]Ð'‚AÎ#EùüG .YGÊUZPÐËËKä‚@¸;Èsó¼`(G€! u÷„B¿(tA.п¨ rŒaÈ?#„=Ê ä Î00ŽD§xÀ!Pwút€‘¦6@Ï ÿÖþàüu9 ðŸreÿ*ƒÿNÁWÜwØÃœ¡=um”7Š‚C~AÎH:ä ‚9ƒìЀ߭ƒêJšá_ü`w˜+ )€„9ÿâ(ø« úšÕà„‹ ŽBþêOæ£ïÝGð¯á>†#¼à~[ö08Äþ ˆ‡«  ææÕTý ƒvþës€¢bB’"’â¨ê vüu€±+ôwøËæàçŠpØ£i@`öPô¡ä  Ü= ~ÿ;ðŸ!€ÀÀ(€Ô'ü·:Ú µÿc£çïóX ¡åýúüódVwöùþ{Ä‚úÚ•5´yÿ¢üOPYá ðãø…Å„@!aq€ú!à?ëèƒ`õ!ôo®&ÜÎøÓ/ú¢þîÙó/pýµ!Ü€ÿ,¦‹@K àúWéVBbB`ôðÿ[ï¿Sþo2ÿUåÿ©ôÿîHÝÃÙùwœëàÿˆƒ\`Î>!ÐÒõ@¡×@^øCM¡vW y¸üwTB¯ƒÜ-i~ ¨€è? ©ó†Bôa(°ãÙüñ›üZ8gª@Â~½bÐYBBÿCoø1ú5‚DkóO„D¯ê÷ ÙPôRýgjp0òkû„ÅÄ ww!zøhK àD¯)êý[ÝA8…N 9ìî„¿-jürý±„‚÷ÿµÄ‚ZÿZA, z¬‚.ÿ˜b’AWô\âèÊHgÒñ·ç?š{¸»£YýVšÑßöï÷ê N#À2aNua­?k”è½øWeqöÒš óÙࣺÕF}O4ÊΚÖ*WŸúT·qz§«ìö3g~âÈo¹žùµè~fõuf»gã7?0G“üNXÇIš0òMS•™¤KÝ»1ôcI; ÝF$þ÷êº&“¼8)ËÔ%„·ê¶wÔ”eiS1H=Ü^4D5Ûõ¯ˆÓÜË]tI]zj¦û‚UK¶ýŒ0Ñ«št¡·¿o–ìãûØàž!+ûì(25™>UQ¼ê‡³Ä—¹¥ž[/Èýì4(T¨ŒtòY iûT ’›÷h¬.ÙðÌœ²¢“·hHÚ ^¬;"‚ÒÎDÄ:C%ÓrGY#bü ²sê†AíÍ‘ý#Ô§S8 ýËη;†Þre±ù;V–>ù¤dë”þ lÁ/`š§Èÿ@Îãº}Ú¬L“õÎé.:Lo—6L%ɰw¼©é¢__&lm«ß3˜íúŽZÕמÈ÷¦:˜¬(ºÅHVH¼EJ%ã%§$S/î&ø Ú4*$%8ädÝÆFÒFý\Ý<”póD‘ÞQöYû¶¼fÚ°<2Dd¿°|÷vxï*íIûP×@¼åÖÏ Érã¥(QûêÕ`Šæœ¢Ú~šÜíXK9öHQ5í–ÎÍ‹1‡Œ±•°0N ñ»œò‡× çª\/%Í!ë}|ù¦—)ÊÈ‚7¬Ó­Ã ð)©õ‡ßšYÎî™5ú­²Ø8øWyÏýBZ½Eɪ?$=Ruen¹%]©U‹ÏöÂÀzÑ››!hwß6Î bÍiÿ”" ¶ñ¢Ã—Rk@NÕHL¶†ð§㪱ڌ¶ÓJ´Ô;¾Qnì‘k¦ÉtBŒç'Se ­¯OüÅ_­¨{¦ 5õ°ë`Üš%mJâ3ÑOVC®gh$G2´)x&Vü›@ç`œ{ô‰ÓO aô`þŽ¡À1I‘ë'Š)2rEt(×F=¥‰ÉûtpÅC¶Iï¢ &¤q­›wE‰Nˆ!þë†ø ÉŠ–Ͱç„4ä%„N/Òí%êuy‰5DG­Ä"]Éñmš’FC|±3«yÈv²tj5ã5ó·Ýô026=£×÷õצUéSB»5ɋӆö1Mæ¦$Ü&gæ­ïð}ÇÑ/$èØ¿ÂÐy1ëdø‰’5–4êl0Ô7ázˆ7f˜>yDøp³P•±úfÚ©;öÖåEß+§>ºœ`Éå•Ξ P!—b@aK:6 tðk»èðz þá &]ü-È Jƒ&÷ýÅÑJ÷¼ƒC¶þ™ðذp4q˜é›d;A>lÉ,Žj0Ÿ Ê ùa…ß1&Åv²NY3•ÄÍÙÐCƒAj‘»®i»(u‘ˆvUs—}¨ˆ+¶³—5;‚¼¬†ûšîºl:*£ÆêV9ž±Åˣĥõ%úÜ‹öË”VÎi¤QÞs¬B±BŽvRWºk‡m_æÛ%eÞä,d*!Cûçbg.±®–Kð—Æí¶ñ(~KÙ Æ}µ] \ú~º*ÞYœC¡…Ý£#Â9/,÷i0³DyµÿËÚô~è.óÇrÑJ•e¸¿kôm—/×û3ëTïL+]9åœ÷oà3žd–ÌJµN¾ ž.~|ðÖ|Ÿ¼Š·^Þ÷Ë~nv¶Î_ŠPëááWši~ÝàலСÎ\ˆ©QIú°åt{Ž à¼I—é²9Ì{1Ƶ„H„"Ó”-†ÝëEBj™“ oEäPÈã'O9|¡qx,ø_·]ì¾¾å²Ð€©k:Š¡/hÅpØë†WÜ®i¯“¡»æ pàc΀e%ÿGŽFk9ǡҶ/Z,5%ï e±éFßLë/Ýn”"êE"“(¨Uwð?ÁJG/Uï눹bDHËÌŒn²Ô¹áAʹй6ˆ d¸”Pf>Û|ÚÖÖ°­ïçSG/ ÑÔ@¥ñˆšÒøÙçrÓ#oo6ÿ ¯äÝNí“òP aaSæV‚(¸É¤¨&óÈQ§‡Ñ{<“m˜Õ¹­k©(/¼¦FC8Ïê/±†CÔ¾kÝíxhæ.bðL[^ù¦ŒCùBUÜ!{ÖìñÛŽÅ<-Æ0½(§É±Ùçy²u¡2u‹åäÔéë"ʓ湟eîR®ž>±&om<»_¶®·¿<©.ºYÁÑ|X‚ûóÛ-¸¢nJIÅ©Uc™Q—co;4³r¿bóý’„CÈÕAÏ£ˆíÕFOràýåzãÃ$ÇLxÞMÃvÁ` #Ç\Øc]ßHøcR øá¨í˜ÆúÑŒ|VuÇ´ÏÙ[ùá;ÆîØ$"$wmsØ­ºiŠÆû{jl‡`…ö;¸-â)>ü`—½£‰àæû^£¹”ãwN`®(,Ï\¬ê™Íü©öâù Ø\ò‘ÜsÍ{2¨÷°t÷/¥âÞ¢¦™ Y8\Lë5–âBË<ó¥à;æ30£PÍ=ܼo”b]üéz'’í§Ú¢¡/³áD§Ä7ê$ú“2Ÿ8¾dQª•N‚ÐSѽ¡ii§—ú‰ÞÙ  _Ï”ßÔt¸¼#PAvc|³Øˆ<S—æG“ÑÏ›´¦\Œ+R•g¼ÄUwþ.xì’z‡R›Hl¿áG×`IÒ]Ùã…-'Ôm-íº3Ïãó€¸ÏõAUêj´ãææcGòùï—¿†ôOó‚è@&`ÏJvìÏÞ¡{n«‰;¶Ì5šq]&é«á¤-¸\‰f¡–nÅþKÚÒ%½‰ÍUÙM÷üJÂŒc“5µ~r‘èy'E9ˆËezðᮞOm» )ö,*ÚkÑ×8g´¬†™rIïs‚¨wÀ”Þ¯RÛs¯YPCÄìðmI|d)|ÔÂýJhÊyÚ“ÕD8þö¦Äµ](©À‰ô“#n~H§ûùÚ3Â÷¥#‡Xã6œÀÆ•"U j틯¼T1ðÃbž[b¹VßPù»,ZI'ãaÙkE¹|Ï9ÚË÷a¯õ†¸®®ùò• mŠªF}_ÊŸ÷°ÜµFE3íµt(Ö¶Fñ×ZÙ:cJ¯†/±Û•üxM¸Ïä©oùÞ@zšn¿MpIÈT‰¶·V,¡,¬+§ZZTWݦKÍ|’b9“ µYŽ3)b²Ž+Ù }ÊFýI¸¡ÁÈ­'oýq[BÏXU§ÍòÖ‰*…Ý¥V‘Xî<ûHz¸L(sVþÄ1«=úŽˆµ9ñ´åríúÃ>#™Ì^µ_/§‘5XܸHáGI–ž¢á{g;L­[w†$HåZ>âù`yÜ]&š6À?´&Rq d¨*”ÐÛ|ÈŒàʰ L‹dŸ7ɈÐ{@{B4ÎDÔï±}åZõ%GB[ïwæ›7¨3ê‘ìW¡2Õä!Ò ³ó‰Ï{xðì óRdЋ“©—¿ªk88?Ÿ }:@w‡ÝóJTLO+àí.ïIrØŠwY^oÿ´Ò8iöbîäñTI²Ó-Ý+Wâu6îæÏZBý´ëà\¥ÝãåûT i_j/MlªIÙ<Ñ:˜„é¨<øÉ±·3ä9ÕýŸ~}2MŸ¨óÕub‚ |^{5 ÞçXRëW?¹´¿Ö’¦Ü"Ü#<4ãˆÛL¾ ;‚,Yèý(g@Ô¾Ú¯S1 óJ+¾ÓQÓB8÷Ýëc±f4ŸÅ2Mç» &$G —6Z¯`µ³ÖÊq©þ4²0½7¬z>µRë]ÿ2¹¾ëjÕF“»Þ9Y=éóŠæ7ÄŠžW=ãYI*<°êÝÁñþ Ìšµê$öÝ*bVûA, ¸·FÔël O®¹åña󃲆a?3Õ»á‰bš×ÔÆÛ•îA×NÃ{'Ý_Ì'ü¶-¦ã1Ö}q㙃¥ïÍâf–œVMU8¹ÒûÿŒ+ Wd0a#•2ïê}©À£» xS Âý|M95Tbã<£Qc+±•tâìœ?`²(ˆ U04ÿHšy#žýi­&þàÇß |‘Æ‘õ)™XmT‹ŒíÈ‚©ù‰ÔºtbùFçá^ ûç~²Aű£øDv÷õ½óÚÅÏéé峇{&Û½ð…W\î=q»¹:—qS«EM¥ìKÇOU ¿]M•W"ñ‘Öšœýx·o¬ƒï7 \gõ~}É#Rßf?8cK¿Õ1¯LŸõL}‡#pšbŒPsâäê ¨È­@X¦æ·¼19kÄåÌä+|ü@5íÐåíÈ´Ðî´´ƒPŸ³èz‡Ž»ŽÒã™­ì›WåŒö¯êúŸSÄÍÞg˜UŒ² j´¶~íý'4¢ì3Qç­Öˆ¢Ð9é ñP&ƒ…k¯Ž1Sá¯$r„õP¿LpÖ|YA©ïå©¡nC!¹£-e¦?}â¼ðíS,íÈ¢òcm/=z¯Ž¦ðÌŸ®¦#¹a¶õqa’î¤DðlùuËå/b‹éŸá¬QM¥>sœ~þ@¨XwP/«¶û36&Ç#ŒÐð×ÉøêOæO&Ÿ¯Øì“êR®*˜ìϽ–Ç“…³qØEõÁ»5šÞ‹Y¸TŽ—qxà„8›JFÖ)Žam#ó"j*²J»7“âżÎÈST|?ŽW®J3»]«O›oð°3?½šu¸qj /†kÕhÒ§l[›ÖC{©OrKƒÙX>5¤ñ²&-9:J¼Z >ß³Ùe)ÆœS1i&¨|„ÓÉšH?‰òô²[‘ÐÎü>ïôEŒ'xÀ«ª«ÐW‰i ¥ÕbP-ÿ¸Û»Dwo™Iõp½I¼\Ölêú- œÔæRËÄ×àóýœõ%´†òé;HÔS¸ã+5Om“½ÏèKå⢰^|¥Ég"J–¬©NÉïƒh§>L§- x€"%áÄdÛÅsáâÎÁ¡¯÷ñpϸøa‚ß‘AÜ ¥¾õö-ñ¯ˆo»¨Y~ó~žô‘Â(̻űAì­ñ%ý@+~+õµhÖˆìwý„úÛwï:z³\WÅx?Q¸bÕ× ÔËÆPó÷ñ}¦5¤œs‘zË`‡=-ÞhrÁ¯dû°[*‚“¬|!ºT^\³)ï”ûfCßé|&gk×0Z¹™;D™m’azè=1be?¿÷¥ú®ßñ'tÃw›´Èî{üØÃö9ßE=ÏÙö‰'ÀÉÏÄ›>ÃA2ª!ãÎÛ™a /À`¹"LG*#Ø´“L#ð™BŽâ5«{N¼Jö^¼å´ ŸÏ<ï¡ˆŠ•2@ÒËNYi¨?4Û0é6Ç:lý¼xN“ ý~Žq@·¶*¢j«fâ8UÏp~µ%–I” ¥ÃûÀî}Û–ÄЂØº»Ñ²½³Gš*ÎPùë} â±vŒ“AQocÀ˜”^§ÒGØ«u‡•ÅcmüL2¢›&Cw$Z—Èùõ­N¯¿u Õ!×&î©Ê|ÿzøQëQ¾æ>†qÅÊÆÆbßv„K·€ñc¢l§{f¯\’ÐòËüHEŠ‘g²§´\ÖN·æÜŠÉº¶énàÁj4Šñ$ì;¿®Y%ô¤aÜpð’gçU/P¾HĈœR‹‚¾Áô#öˆ¾`23´Å=\¿-™Ó[Ï›:66½PÚØ·9ÃgÖ ³|§ª¹9ˆ®z8€‡×ª:$ô=ºŽmÇs´ò†NìÀï-¹¬á”©Í ýrn&ôá­ã/&̪IÀÓÎFh¦˜Z*äkÍK³THÛSZÅÇ©µ®ÜÛé«\‹O}X¿®OÒeíû÷ Û; ‹ËùL_·/›&ãXĽQ_zKæèÌ. óÇlìŠ/ [Ö·©- 6³âU¾—÷êa P”嚢òm–¯¼ºåñZ)u_¤­4«QØ‘ÞþÚ°»júN‡æÝƒ~ÕÖJŸ‹"¼r †eƒ*ÒÕÀØdS5—_dÖwKÄDSmnVßsÈnL·S,×5G‚Ù¢”Š7”qÐÜMpçøïÇ™õ­Å•®?‹FqIœ/n2u@/M÷Ï5ºšúTŸÒšÞÊVãòÍšòÐ- V;d&Ôjň÷Ük1Ÿ¤~V¶/ya~"‘pgÔ„ØÎH›„è÷ Smw‘iZ×(P¸I°Ÿ²&÷l³Ô¥Ü|±ÿyJWØ:7"°$œ˜¡°‘]o¶“æþ®8íU.–¹¾ä[ËãõË{ûÓš:aEÑ%‹.kØÔï’×ÈX}T¯Ù^óúl0¾.ò`”kÌ»^ŸÃ:‘k7 ¨8ÕŽ†Ä,Œû¥ûu¸É÷41¨Xfã°¶Üâs±B®æx„úºz‹¥²÷Ò0‘â³µk³¦÷c|ì«´I¬|Eèa´y4ßÍÆæ]FŽE ÂjEÒìXú,/'Ínvró¶“C:wi>™`<÷õ{åêÍÏÅÓsŸåáél0¤‘¥1H"šgP2mÁÔÿ2Yî ìLZ67#¡›ÓÔ7wC‚Z|Ow)k‡y÷â97t;³êì% qÞ­ˆTÅF˜Êæã'–p“ ¢»=ùìM$•ÿëƒÊvsÁ>Tlû¶àaÓ£G…rÔýŸ°·ÔéJ%ßÚ£]½vIìÙvöýÚ¨žÖáh†>Á×Þ\²œÚãÿ.uúÐ6>Dw‘¢„÷y kJ«ç{™'³¥œúY•ª,F ¡ñzB#$ŸÜ»q ¼sƒô4ãóÁo'Ÿ»åI†H—!†„_I§‹kCÔ¯·|™ÏÀF³»oõtÓþl'¬ácU¾\)tî²Ò™º®¦“×5^DÍDü#ñõZrÆÆwÈ_˜Ð HÙóô _…:zHápÑjQéU°¶ ÇJžãVJ¸ž”§º`_FVnHÊ4|+v³X†Ü„“½Æ‚âû7ËôÆÑíndkè`tîè¼z(åž§icã™5þb©,ÓÛÿ‰Uò¹±ý $ìØ`ùÖKVô?©£ïVt=ÖCn|Á‡p䇮nŒû·ß't¨$}‘š|®P/BÁ}žnšRød³Z'lËÝÙ*ë[¡®x{“­­ÒΣ޻؛1:¨Y”PVŒ{Mî'8 &¾EÁÒÓ:°à†÷\µ ¡k'…Ö˜pµ¶oÒ¼\1y%‚ÂI#w+¢Y»"ïnMœ½C·x &Ï¡Tµh¯1Ç–J—8-éZ¯„1î«§8F Ötx©{#«è?/Á~„‚íœÄ€Ø­½úì>ýá0=«zE©]î¹kRºòãi¢”&QGlç §Ð“ÆÓ7Î×\ÝÍœ…ÅOŠ•=EÂrè#ÌÔÞI¶¯ìs¯ˉ#+ŠËnáØI>ïŠK5¹U4çsúÞþA£W‘N¶Ý5Wó‚[¶ÿ©›­B²Õ‘Àb˜·Æ"WY¨ÇäUwùô4ö^¾2ü’Ј¬-.˜[×=Óۮǿg’ŒKxn(cU[oÑN(™ä7×w»Qþ5”÷hÑhh>©‹‰“œUH³Ê¡ƒJ/óFˆ’Ä­N[1éjTï…\”¦H·™ç˲ˆ¶’@„¨||¥EzÙ/ê– ÙcT²Eo’>\}ƒ²V?ta¼þÌSŸY‚Õ6áû¦¡óéìg_Øfjåa!L¢7u~>]¥NŽËV;«ŽÊÁOµbéSÔÆÇ§Täúbv‚}DÁQðˆcï¤ÉgâÀH{¥œãÉ©Øw~ꮓð4~ø©e´ê5¤ú^‘va8$ F@ÖŒJ„0ܱ÷Õ¾û7æ ›¨é½¼ˆyÌÏ–‘¨ºœg¥…J–†4õ¹{Æßá€ìž@6 ªê¨š?Á¿æÅg혹ßä=ñóÇÊÌ—¡Ú¾_:hRp.FmÒüík®§áwï–p’j¾†K——œ¬VéTÑÝ.¼N¾Êï="Âe³˜ £6~¸Û¦`ýús‹ÁÕèkí7Ð׺âÕ/…3r—m[&1ó '’ÊÝUÏ@¸fû±Ï걓±å;wœ×ð$/ÛèÓmï¿È?$£;“'Êh#´1™ShŨ^æX>7$U…qì~k{¡Â(î qË*Yâ(óL'V°ëÕ[ÝTó–…´=Æ]— SG:Ó°òKííyvl'E8µÌÈÕQ PTW—½Z¦}²îÓ3… ô©¶7üâ+ ©¦zmšž“ôª9q4Ï‘ì6­n^ñq8ÄçåOw¨¥g­%!lϽ+zÄÓ‘p <õZQ)5¶*ÒìúòÙþ)o=dPÎ["zýs†hV¹×í¢xÿ²ŽO‡ñ1]xZo[„'´íÌ^>Öç+2ÇŠ«Iëo^oÅ]%ôÁ*Ê,ø¹þQŒ“½*½äê½Bqý,R¡ytÝ¡2ù‡ŒàȘ OiêsÓm»©C6êzñ‘û Ñ“Ddz:פÙÅO“t|n¦ $´ŸßVL)Ò}Ù‘˜óÀéN¤ŽJô¾bj¥™è³­ÒÝÑ$1çíÙwseg3$¥]Åc¨FE±°aJÉ/¾a_•ð?”:N'&l2”Îë™(¼r¶Ù)°‹cö™˜¬e&Ô\JJP«k^§¼Ùnè’")£ž1lrÅYŠ~Ÿ,”xüþ}gïQÆŒøiú¶ñÃ~Ô›!D’¿muá=ʃÅFÎöD‡»¹®Ì Øêê Ò$<‹·4¹Tõ¢û抉εïIûrsŒ Ÿkïña¥ŒG¥×QÒÚ ä‡$™CŠg»ŠaaÉrƒ`ˆÞV`ŠdºX¹·×&VÅ0Ò çKB„&AÊòE«‡Ó~bñd§d>“o£ ;yŸÝKÒÍX#ä+^„IR¤b3öƒð9v$B©åå…rD°¥)äb×Ç~:ƒ$G9æÉðåc;ø9576®Ì{ CÅvê·Ç¿ó(nˆêŸk¥Ç7§Ð?Û‘ÛypyÓ‘Èê.Y¯}ÏÒè{ÉVO±½Ä(Æ?‚í(önGиêK²Zþ«éÒ>½+Ü‚ËDĵ•ý4¿mà`þ7ÝÀÕÁ ¢–N7¥ I'05…)”Ó$[äÑùg¼‘ΗPÊž%aèÒ' Žñ¦•tzò@‚Ì$/éë[t/†ßöf²{Ovûi°mÜžì?Ð3< 7¹Š½$Âõ4_¡ädA¤­+ís@ç^ãwtÏ’³{6ÜÃk+f9—EÅßò}\UBÌ[V7sXWóÚy,ú •W?U\§‡lT½nß­‹Ü)ÿ©únà endstream endobj 1210 0 obj << /Length1 1415 /Length2 6463 /Length3 0 /Length 7429 /Filter /FlateDecode >> stream xÚtT”ïö.RJI"]Cww7HÊŒÀ 14ÒR"-‚t ˆ4’Ò!)Ý¡À õãœßÿœ{׺wÍZß|{ïgïwïw?ÏÇÄ £Ï%k ³+Á p.^n @^SSUòs|xLL¸ø¯ÉìæAÅþ@Þ ‚#} 8§ ƒÔ<œ¼ü^!1^a1 ÀŠþ s(€¡60Û_ºã€ÜÜ@>xÈÕ#-A€/R ¶`ïßÌðpCapd 9sÀæ†÷kͼ@!ϳ_¾¿¦0€Çñ“WÀãþÛüSm<ÜÜmý& ²¥Ù¿¥{ƒmðæ¦a6â¡ÏjB[U²Ô^\#˜Gˆ'|\#…–8ðÅñ§«Éú9Ùóêï”æºy•,Ÿµkɹ"^/Í|÷[¯¥¯ó8ç¢WÚ¶§·Nœ¾;GLñ» y4MÔ„’gœ&G'VâÖƒ¢CCü WÚÖ¾GŸ‰ÈŸ¥¦k6Å‹™ô­’°ZX«ÖÇOUo³5ÈiDö¿éÁ›­û 6P²ä~sNY‹5J×zõH]âã%^²W%ñJß@ÿI7mGÌ 5ÏàãÇápEñ~ìJ£…|ÂëÜϽW÷ý¬•ÈìÙö”-³¥!j´NÖO÷,Ø]»_7Rvãìi('?•?,3œTõ=É|º<ºDêÍ;Ò. Â`¿'ÙÔD{®ëƒßñuˆ'ØÔÈ1‘}'ªj~ˆ˜–|“Hùñ|¤ùùnÁi73~YWxŸ2£G¤‹ô!vÁfÏ"ê~T½ƒX€7:Zór5á‡g­ãíëé%C1§fx;*Nµ$þÊêê=8ÅÉŸ’s·(.1̘‰ÑG\™{2ŸL~(ŽT)£ö)ÇhOŸ$ÕÖÈð‡­9H懚R(eRîæ¼È Ž«}õ|@’9x„‘—åRʳãN)Î* ·¦­£w)„d :QµÈ6ú~­)Þõ(é«M9l>úôômÂð¹Áu«\V|ì‘!ùÅ'ªÑ™ÊþÚ„I << 'ƒsñsœ%"_»L×5„eùU‘”A!/É›žX3¶¦Vò* 'lºªùYËÔ²D†72Ua“Ós_,ÅûÛ®ø}0d·‰í‚•=Y°²*‡ï(}ÎØL X¶?ÊÔâÓÇÙÔyá¨ÓŸ£ôòNÜbßÝõ‰øbÄRo»}zÔ¨¸Eùmûš×ÐzÉZ1“±¶1jC©=ÚÊGMIþ,ùI¨Óá[n *›_ã¢û`b¶&\Ÿ,Ë‹é ¸ ¾ä8¡‘´/ RâpOKçDW¨b…†H!]›Æ 9«¢à½U\·p2)@߯ÂDÁMùšRCVf Ý&Šk„FKœ÷É®¨vw—–†s‘ #ljÉ[–”—Sé•SøþТ†/MËlöñ/êqÇ1¥møÃì™Ñjm ®§ëw$:•AyVõ[;)–¡÷äUQ¯¾ÍwlQ‚ßÑcpr4.u‹¸¡~\”(?ßÓõ³ó°`ÖÃØÂ•[-Õ¾˜ÉÈl…!µ¿š)‡ÜÀÂn„ÇVL¼v[4ŽÏ Å)iQúR°ª’ %ýÄCÆÚ\>§„ V÷ÄNå“ÇŸ ¹µ‰k$Pñó@ŒÕ®úg™ÀMpÖ#Òð·"÷*gÑ-ÉìöQ:°g× êŒÝS_¿ÐNÞ×}Ý]\·ÛD9k4ëe’7:Þ->iŠð  ã|#ጙÿžÍÛÞ'XN¿ uöŠk:†Ø>ÅAE¦vùi]Qn«Ü$¦ÕAiæè æÌUÅ©/–ž*-èÂÚÖ¦&ŽK”5|ƒ’º&CñL³'ú.œZDE=+Ù^>Çþ¥¢ÄO9s¦òÏß1ö#Îo7k=O®GXV>,ºO×»u†´”ÎÜqÝž\Z%µR…ú0USúS“ÝtåD± 3źˆ:Fz¹S›É<ù©EY$¾ÈÜïX¼a£Ý¨z;ǯ¥P$ˆ«Z6ÛI·Û·½aÙœO‘ÝÒ×»Ò'DÃ*# JlÏ—ÄŒ¯%2Š€E±7f0È„|Ž2SOÆ1A9[*>ÂcúSË?ló’Ñ"&e­ÛW.›Þ w‡àºÐ •.¼2¾ÐÂ`ó¥âØ=ŸbÎ|ùÄšP«óCT‡%¢´5(;(!¹¶¥¶|`Úe‘¡Óš‘»Ý :¬ÿìžJëŠüèÙð.{Óªá…Mk‰Èö\Bï¡´+¯í0@ÿ­ö6ÿ¿. :+I߯¯vxJ©öZö †í2!†#uLØ$f׉ôk²rBqäv{“êÎ’vË,†¶ðº0˜þ¢›j†2qy®hhq“J€¶ˆË¢®âpâ¦JGK´hCæúrÆ,C]·~ÈóÞG6¹N™EkY{|þHØæ5aTo]‚îò÷$É{WÊ.ýƒ»‹êá¢B˜ŸºB _z(4\óÓ9ûO+ÿ\çN‡t&‹¾EX ıYU{e¨;¦>w—¬÷@5Jš#•o©–à*µJÏOç® •Cd‡•”ÈóÇæL´t꟧nKA©>'• Tg4×Ð0|ûÉSW¹uÙÂ%rßjx"³]W,o›p:7߯çÀ”AÁì¿ó2½ÖhNíDX¨w¢ $Õðc8­8ì¶ÁÍŽvÂ<èÀNÄòÜã)þnjݶª$òr^ÂŒ4²œng"§B®‚‘`á+¢Å‚˜çX³b†\Ð9@åEu¶|zI>$½W÷Ef°åLÔ7ùŒÊˆ®p-¡“Ï1©nXƒ¡œ¬“«sÖI¯?w¹slóþãDYæ78#¿öö²Kpzpž«óÑGjU±ù.Û"gSæš}¤¾˜{Øh­1KggÆm b;Ƭzâêè™¶ Зÿª‰n„ØAw÷6͆ê9­×K¼´ðÈwÒ…š\ôC™z!a–AI!BqØÉ»÷S»I9Ô¿9AÀpÐÄøtåÍ™µâ×ú#À’(˦9‘Ô[ªM?µõÔ­î+¼Û[ý3Ù’‘„ Nu>VÜZý¢Mñ~ߨÂv]ðÇ#:Û¤ûYùªZ”R¯SÏŽ°®gFœ·R:«‰7Ñõ:¼˜Éž>"0ħ0Y5­é˜J‹×ëǹ7´“#1DÔyÓ>g…šÏ|{àNrT×(§nèáî“g6`àMto|è JsmN£!û ÖXåÏW›³¤3£CƒeF¬›“ùtLe¼]ÅÛ’6ôͦâéÚ†áÙšj¹±û3ÓýÒð4Ћbøá#½O&P­*Tl R¢£¨ë³?¢µ(RSÖ4lF7Ðî…]ZJ$fÅØ}4Ÿ‘Ó°ä_àJ,ãéOÉ»á™"h)Ý,¦Ù Ý·CWïÆ9f‰ƒ£é ƒ);L¹Ó{q“ †8‚¸ ßÌì[û?°Ç2Á¼ôHŸ¥Ìï‚ñE›ŽÑÑio gàÃáÓS=Êä+·ŒWe{+ì\„·‘Åç¾¹qËï~€»E3$CEr/Šå¬?6V|Tÿ*Ÿ,¾gXÿéÝË’íí·cåB/ºí~gåG©–ÚØ€¿@…ÿ‚’·/!£FÌv)«/Lr ]äç_i$4^©Éb"Ŷ }_ƒ`Ü¢Ãgèaõ7¾µˆmã¾¾Yû¤ÔU":¿ˆÆ4ç‚Æý±Uéo †Ï’Ktú˜îe%}KO³¦{ž æ#™QašáÌ$Â~缊`;VÙð´ë.ß¡S -"f|)¦j[fdéAZ…cÐOòUPF„lÁÃj#-Œ ¸iÚ¹ẖeë:cv%6g¬ªFj4á`…ž³òå•™'_ÃMi®/oc§.»j2c”¦¸‡V½)¦’è*ú\µÄ\ûßT‰=&gLàPþ0‘߃Fé|F1½ì÷ WW¯½Å´<00¨Ïbz3›×48aÔ©m;WoIÞuõø3z‡xÁÁ§ðˆÈ©3üý/üFV? eÆ0?úä‘5í¸® §ó$7û`Ën¶YÆë^CS*úS­9Êà>«ûø‚㕯0E뀃CX>ª),¬ÛY‡¥´k•YÇ.ÍŸ€‡?cñ ûEbßñ`’%™gl¾ImÉH ­Z¨,µæÖâ&lïs˜Å +_f-êl8äÙzwÎs•xA¨á¢g:wL¹ñÛu ­ã$Hq4צGa²»Žš«&Æ.ÐÎ?T¿Š"Y›™œa'#š¾›Jål”úº6á4µV(ÁxÛ-|Õ÷-ßêŒò¾]°Ç˜ nßNÐG£˜šÍ‰çªŽ.HpØãbXó±Ð¸·u›uÂs§¬¯YØAÏôÆ< –½CÅ^w> ø¶Gž¡ŠÑ™d–®¯Î¥™ /5ó¢Èõë7ܾxiM}þ^™zHà9×Ù9à¬wML£î­én„Br‰»Ü"ÿèéwái«ÆŸq¼aRë1›1_N¨ÎFÖ²/™èÉM%«Q(æs?CýšÍjy¢˜¶wG„þZ³RÒ®ýâõEU˜.—ª Æ3Ãa7×[ôcî¢HÛ¹ÙýGűŒ8¯+îŽ%lCg»dÃé 7f˦ý‚\…«btÀ/ƒ®+‰;£Íeœ•_~I8 ^œ»ÎÎA -{˜ª“8D¥òÈÊÕ¦^sWXü|Žbëqnþ;pFáÍ«Mý•ޱ„z¦ÔY­ˆ“Ž+G>»ÀoèÌœvÖ¾G·É5" =ƘºƒÜùÕ^³ÊŽŒá±: ¹áK)ò–à‰§Át¯U±ž§=ûYS¦—œ7-˜ŠMßå[¬w¢†»Ñ–"ösDJïÕ§“•Jh¹–kß.´m¤«ž(çŸiíªRî;¼žØ¹>…]*ÐεmÆy½wÓýäØòŠãu$ËÀñ©ãÿ¹Qq"£Åa/ãÁKì«°æ\o¢™Y6‚Bü,+µ#¡z¶J9Ñ­)LÐ8ëx¼n½¡’ ÕîdãiuY¬Y⣎ŸèkÒ 2Y“¨šÚG¡?Þ®“1KxçFaI¹~J"èDWVJ j¼¦Û‹˜™ùQÚˆ}¦º.+0G¿ôn¾Ò3î"7>TÑÑ4ßN¹•0äƒ÷Ê~íFѶ0‹Èî9˜8¥t>6¸ïb¿N™‹o’×L4ߺ|’Â<¼ù‘'äÊ–Æ@Ü«;§Bsð5֜ɳèÕíÎÓç_ä**xž¿(¿'o"ÙE0Ð%p°sÈ2Çל€A°0–:Mf„½I'l f(ÕÐkÓ&,Ÿ\oÌ—JP0ÃÉ!0¹†XgÔÕ]ô CM›ÏY”›¹ÑÙÜ |ÙÝ£‹ƒŸ²>Zùæ[ém:¬Jšœ“fú!êjG1ÇÍ[½ûKåû‘Ï# }SÎJq-Ÿæ‘<»ÏIhÿöÈ ¬ÉÑ;:äCŒÁ8/Õ±ôðð”õžBžî!t‡—ƒ0vw"Ìu«=2—õ¹âËtª+K|YÈd¾ÔV¢®ãrÄcL­ù9Ì3Êkü^í4]uõ‹…¬’מ>{]”ª ˜oó>”|8}pÿ"Žœ©$þ1\Àõë™èÆðõ’ÝÁ5Â0} gÔ¥ñ“+NQnl¶œ¡5»(ç•î…5fUU!Õ¬qzv\ª]¤9]Ú ×>òT•$?¾Óv¬‰uÆ ÷%´”l– æQÒ`\×äåۚĊ›TI«î)»--Ç/h[ñQ0J7~ì`µUD«Bß”’›^±)ÐZ$Q…FµC?»cÉxóWį̀Ù&W'Z†L®Êá.gµDñöUÏÀ°e<±~©Ü5Ù€>¿Uû·^Љ„¼~ŽÛjš”}ƒif²âÔ³‚äp_ã³,8ÝõøÂí`]Ñ)¯'êç僱]%kâ»RÌ·³©˜ŒLêÝ'ËcÃæY8ÎrC›|óó¤>²I~I¢+äU‹{¡JPûMù§í«BžZ tNu8Õ~1ÿ̉XñrËÅ#«™¿ŽZ˜P­EÐb’÷2›F‡Í ^½ªA½ñz¿ñ>Ù”B2¸í8¹çÉ/§iž¼>U#Ý|¨Oqú“à‘ê§ÙMÕ®¹÷wø¹ó×? Í*Hõ³4Ð%÷7rM–"_g+-8;Í&ç"äCt||„ nrfƒ”¨©À¬*1‡}œT'âÍ=ÞÛÃÀÅ­± ñ3À3T{«§%Ïf·c}·âM’º]ÛÀEr;ζջ'¹u'Œò8ݱ\ýP†’²¯ ¨ÞSTkˆPÒ[ç/gæÀ›Ú Æ+ÙVA7þIÁžÜ:¨kDzùä+tš\Z<â€K‹ïyô_¹8Ìž¾³ë¶fžZés±HwÑÕ2ò0$*OyyÅ2ÌÉ“®M?‹Q@w&][à 9*¶f]UÁÃÆ•wRhãØ}Y¡”lÑRÏA6*¦›`hÏ ˜¯iÑ\³w„ÑoU1ÊH×b*~æ<4µÅ³Þ°È¶¡t(Y’¼Ç*7–6ÂiRÈÙ¢y³g>/ýòq𮻉 ‚¶?Î`Ñ,™OZ Á¿\bLüüõ9»òÎϼ†ø)Á®•UlA¾7–¢ý3øâ¶AцߥîÜJô>³ú¾RÔä †‡‹(Æ¡¯ûÝ"¦{ñºÀü4{jm‰$N_®y ÈÍét‹c—‚êÆõRf€œß:‘IÓ;ÿœS»ƒ/òˆÎ£•n0¥ì¼ŠHïž‘îWÙ0»2A¢yЍÊÙàðJñA¹æð‹VRu´¥¦—€âZ,ž{r »­:Éü‰XÚ´h¾1å]KŠdP#µ—\Ô'Ý%Žš¨>œk(Y§úµÔϦ”amâwé&GJRg[ñÄí¶(fì #¤âáä…E”Æ£0|Yô š"ÛfI Â6Ù¶ˆÆQHl©BlCß ‰Ä?°•äÍÄÅŽTn«ÀÙ‚µK‰¹w1ŽàJ‘ÆK u.Ñ1Ö4•ÙÁÙ¯â¹XÄØ'ÆÌ³ŸÜˆ8Á“ú®ºÍzž;eÍs>5_{àôùÒ§|þ)¼ýeÜUå“ë˜}‰ « @Fѳ>Ïê6€^~á‘SDÆÅpZ%ìfàÉŽrñJtaúý‡¢ýÐ’+Ê–-–I¯(ÉÐclõÇRq*/ú–£ì½™MWIt¤z\”ÙŸÝ´»“ÂT´hM÷UHî뮎ü Èö~tcfœ7¹Wçzf qà{ÐGe~H}±Ã"à™¤ÓyðvZË,‡Œ®ë¿Ø0Ì»ü-ÆpPùGy¹" ì-9šÑÊ’*ㆳ·¨ LZ Õ¦qh„éÎa ðÚ¢tµÀ‡Ú_I}u’%ç?*úù¾ÍÿbÆ‘)I'iûEe¤Üö5åqFz£2®´ºK¯ôμ÷Þù~Õ(ßSÂ…zs¼Ç…Ü>Fq¾YøbǧgÈ“E¢D±…¨ 8G“ÜV³ÛC‹±W$¸ !¹Ä{=lø°²ö…1½ò&ú¾Y|ŠI;1öu¿ül@½ååæWË´ceÝžsÍ.¿Ebw㌯›-a2Q°u¯pF‡°!é*•’ˆ÷T£ó6ý¾½ØŒ{ ?pÔ1ÁÓ:×*€¨œSô}¬“ÆÏ꺹XVòb=–|!‚‚•ÄYqÃò$ý©CéŽMÞZ$°þ¾Ÿ…¯ÌPÕãìW†íÒ¸Ó?–<“”[9@‡RôRZ»NA:ʨ#°^œ‘=«"­ôN`œš¿¡àEÊ^“œHHM®*F)gáÌNƒv,W‰¶@šÍ­Í{“ÀoºÃÖ9õØ5uÊëÈ`‡`׆“ *Šœ¡±mß}ÃüÀ¬ä}~Ý æã»ùH”~Ô[M\ÒàiéfbT ”ÃØ‚Òz¼&c>ª^î@‹B0J9¶†ÏÍÃtŸ°(ÇXðók@BÚª”ÉÍw{³1±gÐ Á.lLy=©353§”(—êÃlŽ~ÔÈúäÙPš`} ¢vÑmòØ_[ íYõJ”–üú> ³ÇÃMÛˆukа­”[ذ©/{GýàN¯Ñ2ç+»åñ¨ì´Fó±Ä’½j@ú VROÎ÷‡Í’ÓîÒ/£Äï ÇdîTž¿7|›à§45Æñ.‚ŠÓÄÛ´¨«¾šØ9uš)OÑ€o^ˆd8NB†±Û¼âE…-ƸPßO“–Q™©Ýn1ñÙPÎÆìEµu퀗>h#Ô KFQþ¡YEà¼Ï‘=<Ä6ˆV#±;SWÛÑ»8i?Î9ŠÃåI0w‚” ÊÓ/N¶¾'sžÙÇ#ôh™=¨b«aû_¹7æ÷¯¥ØˆˆOsŒî¸©ÏYkÂKíÀŒ'ßÃþôhA endstream endobj 1212 0 obj << /Length1 1733 /Length2 10668 /Length3 0 /Length 11784 /Filter /FlateDecode >> stream xÚµTœÙ- Aƒ»ww Á]ƒKKãÜ5¸[Ðàw înÁ!Xp·GfæÎ̽ÿ¿Ö{«×êþvÕ®:U§v}MIª¤Ê(bjg ”´³3²2±ðÄä她,,ìL,,l””j °5ð/3¥ÐÑ dgË÷/‚˜#Ðüj7¿òäíl2ÎÖVv++7 €……÷?D;G>€¸‘ È Ï±³:!PŠÙÙ»;‚Ì-À¯Çüç@cB `åååfø# bt™ÙäÀ@›×MŒ¬ªv& Øý¿RÐX€Áö|ÌÌ®®®LF6NLvŽæ‚´ WØ t:ºM¿(ÙÿìŒ  frúÓ®jgv5r^ Ö  ­Ók„³­)Ððz8@UZ h´ý“,÷'ð×ÝX™XÿN÷WôïD Û?‚LLìlìlÝA¶æ35 ()Çv3ŒlM¬ì^ã\Œ@ÖFƯ„?*7HŠ(Œ^ü«='G=Ø‰É dý»Eæßi^oYÂÖTÌÎÆh vBø]Ÿ8ÈhòzíîÌNÖÊÖÎÕÖó/`²55ûÝ„©³=³º-ÈÁ(-þåÕ„ðÍp²ðp³ó°€ ›‰óïôjîöÀ?œ¬¿Í¯x{ÚÛÙÌ^›zƒÌ€¯?žNF.@ØÑèíùoÇ#VV€)È 0šƒlþÉþjšý‰_‡ïrè°¼jÀòûó÷“Þ«¼Líl­Ýÿ¡ÿ1_f1I) ú?;þÛ'*jçðdd0²q²XY¹YܯÞÿEÉôW,ÿ„JÛšÙXYþ¬öõšþS±Ë_ ùk9hÿLÁîUµ@Í?"×eád1yýbý–ú!ÿ ÿåÿ&òÿ-HÒÙÚú7ÍþÿÛÈdíþáU´Îà×·{]Ûÿ¥jÿ\Zy )ÈÙæ½Ò`£×E±53#+ ÇŸv“$È hª›Xü)™?íê¿WÍd T²sý~·¼F±°üïu¿L¬^ßN¯ºüÓeäôºlà?Æø_×é¿ë°5±3ý½wlœ\#GG#w„×Ñ¿"N€'ë낚ÝþP6€™ÉÖüxíÙ`fçˆð{Ì\\fÑߦ?÷«´þFÜœfÙ€YáoÄÃ`Vûñ¾Æýƒ^™Æÿ ^³É߈ó7zÝåج,ìfóÁ×SAÿ‚¯Zþ ¾ždõ7dc0[Ù›þ;Ýë 6ÿ0Ø^‘ó?ÞW‰3Ûþ ¾¶áø/øz¶Ó?·ñšÝÉÚÈÉâ_„×jÀÿ$mlôï쯗 ÛëanÀÿ𙉳£ãëPÿXµ×þÿñâÝ€&‹sv&ü–5­·U"„®Œ;c0')·ZlŒcùúðà>‰)ƒ8ÕÌŒ%Ù¯’‹½¬’ú– ¢·Y?æ/<·¿‘Ôºs\3’Hþ4'1Ž{¹†œ‰÷¼!"›Cm„ÈÕL}ÇW䨡DÖùVÈÔ¼O•Õ‹º¦g!Þ• «X’[&¨U¡½³ª8C‡ˆWãhSÜd< ¶Ãy‰G½i°©–¬F&+Ð~‡çZ‰¶Þ?4°‚ÞKÜá'ãâ¿sJ F—à 瀫ÔXÉCyÌ.r9LÃð4þ€)*E«3E_»“Þ§yíR9d³µëü…¿Û×òðëc†Èj`-1ª}†¡òÈ÷_ߪ/üVd.I^†ð ü`[c*ØO…³ÞåŸKµ²UZ÷–¢Ô7‰Þ«ÞÛ²ò]¦½'ñPg‹&-›ªDØi"î‡,8BçZ9¡:Ö"5MÐùú)¢Ç<~µjê® <Ùüð㳚)®P­7^˜è£Õtñ¥ ï¤Ø°IÐc¨Hž¼üBs>¬AV3/¯L¦J ¢õ™Ù—jÆKS=”·eOkåê}„O½“¸ŸÌVI2éî-o°Êï>#ç„}2l¦±úì$ü“>-V[ªþgI]h»ç~‰`§ÓÌBq~6ï·7ãÉÊÔ ”Ýùú‘ˆã%uaÔå;PYjØogä®D?SUÁ…‚Î4­±OÚø¾çË ô*pfÞ£†¿« ½Ëbá…xõ•üìÒâ&QRÉ磞îÅ<ÂXë‹{ŸÔ"i|†²QÆ‘ Ÿ®Ðï)ýaÐÐÁú¥¢‹Ä«Y!½A_å…¼ aPV¡²+k ô1-ûª›P·æ)Þèä€ü’‡üÃ$ï-Ò•‚Y›BÞy+M¾ÿ—a^ø]¨GZcM2§Ç¼•ܱT7ÊpõØTožwÇ]ˆn™ âÙÞx>±/ù–¯6„£3Q÷ÆÙñ„Œ"w¼èÒ œm`„{}e?‡æãØÔx¨êq¥XvÈTÊv2ièÞßÏ )ʦ”(.5'RôúåÁæ¸J¬<·=-Úcrož2õ>+î_xK#Ú\ð2F$Áqño—-m rTdzéº(Á­éÊiA4L¯n¨°FðPr+ðÎÁsaûûïyQ´ß1sR(6tl V¢ìÃÓ!O¯ûÐÁÙÒwõÜç·ôéý‰K|åm>y:XBè^ƒ6ükòÌKsæFŸNí,2Rù4]FjWÈ^ÊjPi-Sr§”[÷£Kf\ëÒrIMaüßà$•°¸¤jäá¢l>|ÔzáUvycêð¼Ç-¦SÂ1‘¥©G–gÏža¢ð.ýÄLÉø+‹h âAå[S:Õðu}ks†Îhü”\Ñ-T­öè`'iªS;ŠÄÐ O,kÀÑäBšl‰œÓÞ:˜¥u»+„\ó±'äðér¾¯"Oƒ“ CŸñ£”…^ìÝS¨|é8U•«™]ÀvÝÇon©õŠyuÓ·ì4â7(Aó<†YXýÁ­Á˜ªë¸ý§ž4–ãL²*Ú‘WØäÎÁ¿›º· “mUÆfçB{å€õn‡³{ÙÏð¹hš$„ml ݈+68/ÏÍm6ǃ{IÕÎJ³"¤77y34(E•ÅœÆAülÍÞgD¸xÝèPbØ8ØúÓ†³0µnŒ+þÐkÉöº}K/QÑ÷A§f\³VШÓÕQšK‡oŠšYÇÜŽ.mïlSÏ ´ú¿X†¡ U™ˆ.—mä¤\5Ÿ@ár(¸Fãµnpƒ9Ýe½˜ºe¤’)GS¹˜,o‚¤@Ð_ŸNs­ÍQ=/ºVž„ÍxsŠiÒæE&ûøÝŸ‡ŽÎs¥ºx_br°‰† ¢¼é+ž¹p(£<û´%P^î6Êa8$b×3–k]Ù‘¨² ;Ÿ‰‹ÿ³®Gꉧ‹’±0>8¹åZ#sÊ%¢$W“ÎÚ¶œ1[¾±K€'nĺN •ÞvèøŒ·\üÞ¹º<Õv‚ ½D¾¹>±’"ZF5µ$VÁ"oã±ù»ébÚ›äë-1†0f Ì’S+¼6¤q^Iα^JB‘Îuÿ!>ÜE̓ë3 Õö(;¹¥!àDú™è¢è°ÒO([úÈ- ¸)cdä)¶¤umWÃjÒíbtÕ<(ÜOŽ·$ÃM 8\xAùÂÞò6,‡ÄŠYàu¨Ü;â„@†˜]I1I1K”Ý;óû¦±Ã ='ŠÛêwuœE'A¬5E¦7Æõa¢¤¦òØ=m²²óP¹¤µ*swºyhŒ×¼‡8éüÄA%ýʨ®Mþ¡r”–•fPS6`†”y~¢SQ¥÷C…Ff8DX~ ‡±KLUÇ„š½:ú°bŠëµDÓId<ãâ[s_«…Î{Ûô—?¢ %^)ÇèÞž9? /µqÚåûºø†%M]ª­?ˆˆ©).ÜkYD¿Ù'’ÓöÛçá^§@)£5íï±n,ûÐã²ùSA}GT²¶˜Ã COU%KÑÛ­¸þÄÝ ï{mHUËáø5azføÂQùìîãXayÂçäSr@Ô¢Wìm\à–܈iÃõ†G+:!}Uã÷oâpò6 ~¢´<[1ÐòäaL÷M!íÕºˆ5Àà+ÄðMíj £4@P‹^£^£/íd`²~ à:¹¨¸åQ©šÊ8šuqpFÄòi˜oòhîWدÂâÄ&ÔÇ*~¸•nòó!'mo 8ˆßS»`˜T9Ÿ2Ž—ùôîÏW@|Ù¶ìÁÎÙ‘°Y?úu¢Aàârö¼ êÀ)ßqKüO#Ë÷ Ac™ bè6“„¦é#RJð3õ6&…7OÊ[gþü ȯ †^G4pFëòš€íþhR)d嵓`ÎX|×uñ'¢ˆíC–G ä-Æ©÷öÕŽøæì–ï’ßQûa tð'©e.möÆd1Nj‚Ÿ|æ$I#ƒÚ!–„Þçé°‘|÷¦gTB$y¸Ú?’[æ•Ü}÷jÓLc5ú&¿ãûà9@˧#¶ŠöÛÄ=œ9#ôð"Þðb5]˜Í†7Mœ:J,lû¸vïguý©AAúΙw’¦ñxã”íßÂK‰GöøÞü4—؆¨v~Q޳×ðñ§âÖáuXFW¶“þõôX§‘#ϦgÔsè¢ )Üð}òª6[dÞ”ŒqüzŸ€ª¢áòøYÿòú´â-äõˆWo c‚ý‚ۇ㧨RÔ¨L8!j¸½óëšâøÛÓ†œ±oä…iM"õb’å©IÚ6YAúˆG‘L˜… Nsͱ'‚„f¤zD ó2è9SÓbhžªœñš÷g•q¢§ÜÅbZ+4q¶{ª6©Âjü¤ÕÑ%G}eŽÛè?£¨k€9ãV”¸5o{WpŽ“\¬É¯©¹ÎÒ#¾ñÜÆG K­µ‹ø/p§Ñ«͇¢³µá—܆G¶wB™ÝñÍôNo!ôw ãÎýîkº!Ðw?QËô†2¼`†îÚ?Ÿ¡ÙÝf-[&ùÔ½ï1£b)âzë\aÄCVªrÈ=™D)òϧ@ƒü‘€õYU1cB;ï@øsyGD] á¶;:±'ë±d_é\ROm¸¾¤¬Ÿ¯· Óí„0ñ‡êÚk{–8;Å+|?–ÓBì®ô:i£9èÜRüð»J"¢ÏÁöJ«ÊŽubÝ ²Ô+=ÑO$TX¡OY º JjšºÞÔÍœ(ßÐýKbÙ™1@š¦UìN"'«¼üŸvgpµ¼¤· BXn“É›u uhå:=›qY×2‚Tëda¢þgoñTMÒæÃ/ñß yûpŠûíØˆ«'µZÌìËú°ÊÓZ}?]€§Uº†§dd¶F÷Â4¦<›´=àúÄo¨!Xt®YTCžEY'‡t´®|&®««¶\® ©¬¨YÚNRê’bNª\´Cí¬x©†د¿aUp²-hõó8>Žúìëqí±ÒIà¾I‚ú¢eˆôy¹ßÖÑIs«ö³á>´îTõ÷çýáã6ÒMÉÚÙÉT³jÑÆ9³Å Þ•"Zˆo•©dÊQë”Æ“Âx}ôqúJ \"ÛÎ$_{½×¡•ø>Ð@ÃX,IÑÉx‘ª,Íd×Qûš?@\eÂzʯñˆÓÕ¨0ÜnS2–>W «Ìý˜ó1ÏSòèS±ÚYƒv€‘§ÕóÚõ÷pnkt­ec²£Þ”ûƒ¹Éõ¶ó¾b¸)$Šhˆ+Y‚C”ëDªbÐÕyfŒNCÓÆà‘¿ŠâIÌ5í˜TÀ¨D£¥³¹(`|·–ü‘®NBݸíîµ;$ñås‘ð‘¸Z[Ò.ǰ[ÏÞ !9,‘²õrpÇcY¹ 2$ºl0åh=áã›N]ÏšæCqF{ÅAèÉæ  UïÔ Y¢—e*u¤üíXf¤¦Y~÷üÄ/O½“@I¹wʄ˽H¹“;ó …¥Ì–Ü[ÌP”úÕ´0›ªè<­CÉKjE,h«*tçp#ðwu¿PÅ-%©º4_?SÊ&+„oRv¿øTÃ=pðFQ´ÍFaKÁ‹²h»[ÐÒ íñŸéð'§4UM>Πï¹3H¬ŸÝ­Ïj<ôM Èø„¡ŒÞô]ÀÝo+2®Ðƒ¨¬aÁï@àŠ…š±ç ·„x¹83 ¡Þ»g5ë÷:ãÛîÄýÙK%ô´4q0n,²WÛ~û½O+“ómàò°pz|la+38YÞ/¾|cصeéê8HÌMo M¤Iò)ïʘ†k¼?ThÑÄ`Ì2ïAo¹McÖâ=cž?Í£A¿þ×H>CÏQ¡ÂÑõ¸y8ªÜfHØ•Ëë™ç·‹¼R½êlçwŒû¬É&…¾­¦§âõˆùøb;*·œ.²»÷ ¤÷{wMµÕü‰¨qïPáwÁ±Š”ÜšñÉÇ–Ÿª»OÔ͵ZwŽ÷b¢U»ˆ’j×N5G±Ìf÷@Š­#Ç‚Z²Ñr'ld}‚¼•a™Ä|«§åü[>°©ÃX+ Ndɪ.H"M†m„ÏÜ–-³wCyR bª7z(NíÌ2qŸôÕS½'°‰};®Vs³Ì³w9ù~´»¸4 C,G?oÓùaw]rÓ¼æ¬ÑS{èκ8çÂìºfßìyu:vh8ÞâÝ’žÂÁ^G"ÙUÓÃN3Í`rO(M6V*”ýå½Ñ©ðJp­é÷! "ïô(¥0e::Šù“²Ç®¥Edôné$ÆØÞtßã ¥É20Y—À|v¢L“{âÞw&}ù„;ÃåÊËá˜ô ãüo-fVî`¹Š#c'­jÔ\– ƒ|)ì³úèw±xH©Å ¨ý”Ør?¼îß9X»d¿ðãœ;32PŽNdÃàX’)ÛÑú1Ô^w’–•üú‘±üéI*-z¸éB™ïË`1ÒO–¹_ â?X77eùúàèß?Ò\.„jÝ !—ÖV³o-0ê‚8ɬ «zæ "AÔòÝéBÇðwV}º,Nò^Ķ®‹Ã3BB·u<ž1ét«A=áZÈ5™…XÉ »¬þ k2Ýç%¡Š÷*µeQ ­e,…è|çD(xç|(í9Ãü}XKH ö­Üzm›3rgò¦p9ÕEÈ"‘¯‚—@>âQ«…!Üãú…QœS¼f+E‡ÛH²pÂ"*Z饃8ḲœÈš÷Å: >ß9í°(0^,:Z"sŽo:ªoËçެTŽÍ.ìf‡'…‘sÑ(D¿x›jP® 7(é(9K±¾00íìùDkÄÙ™]™0ñçwMüj G$2ºcލ´§Øó±.ÎyY~KçL†'?bqǕ°ýXH†ÅÕ÷£@YÐÒìR½èŠ@­ë—ÜÞq_ÑJ-æŒ'¼ Iß›"Ëš®Ý’ÒxÜz6Êý–>&üφvß<ü¡i¯ñ§Îæ˜õ?qbâE©7qïIi’CH…èx÷ù‹ ɨŒœ÷p•žމ{x4T¾®£¬0æ"+¿úË—yZ 4¸ãËp†€tä—g7J§öåÆŒRñ‘~nçõíÏX<þ¡§ äéºç*FX9BvVÞ“3¢ìUø÷в-~è…ÙoDÖµeør3*`°ìAjÒà´’˜öLK–9YXÍϽsïÅþüU)ÉÒ·v÷†Õó×£tý:Úžœ(ÕD¤´¬­-—„®o_¬È/ƒÝu›ªvgàƒ §£kUÒf{ûu33µbÀwìÚ}Ó|AM°ôò–âV§< C+ÞSœuŒ}*$[áò¨ö|Λož²ü‘‘ú¼B6ÈAé)vèùæÂ¼ï«^hŽC-WžÌ@à “”‚ºdÊB|ÈÙxhoohâ ‹Bª=³uÆ–òðQ¹C»Ööûj`¾;÷7ž*e=^„ÒãõþòsæƒÌv3S«&‚Yþ¥ ulèé]6´­‡\œ²`0ÒÇ€ÐNUùýÍ£_·w<}D}dV©æbr31Ó dÅãñ91ïÆ­±È3òàxqâE}å-Û´ü:}اʗª®m%ð›} ÕŠuêê1G—²'ˆàk*×f“–›Lâ?‡1œ‹Ù•ÇŒð³/-MTSLÉ‹kïìtôŽÉºN½ãêüz>ÃðÐã`Õ¹³ vxÿJ9<†}.×cxlÝZOÖ—à;–·ÑRå&ꇀP§ª ÂÜñ-J‡:⪳ؾí6 ˆ »k#¶éûæ Ô©êA cõaÒª4ß >ÍÙûYl¥,5¥€©Ñz¤|ßi¤6d̹#ßX.ãmOlïÓÖrHOOT€ ÚWÝîPµ¼æKÕ]5Ǻà^N– ½?œÃM$|üùaØH<6åd¡ºn&ZØc:Ýa†mbá®:2©c&™×SãÆª‹Íñz¨>‚ISŒtõxn~ ™³P4ÛUå±ô·‹ê¡’¡’’ó€òˆì§°¿Ü/™±êX›}dÍTÏDž».ÚôJ u!LÓy‹y­VdÏéoŸõ”­šš3…г2²TûÛ“ùµ³KÁÂ!ª* 7)+;gW=…#ª8@8EM07ÑnåKÈ¡_XµQ5¼‰%¶ö™se6®9.^ì†[´Ýfæ?§‚âÓ°Fâ;Ê•v `bè#sÆñ㻺ƅ:.âvg©á(¾ðµ”°?ð¾ñ:Ýþ;ã¼RÌ´Qõ!dÈ $,và ÉÆé¿òXÉU»RÁ64û¡U]š'Ÿ!Á7Þ8yQÄë#_†’ê嚟ºO!¥½ÕåTO±Êòûˆˆá°òÙæ®4žc³ˆTÑbãÄf !*7G¢þQHöœøA)÷¦”DÈ·W½È‚®Š 'öòOØgwBX¶˜ºV„Ìi2^8üXìæA®±ˆ æÛ\Ê?ân[Ÿµ]UÎT·bgÍö-ûæ“Ò8g-ìtË8¨º°›©<´9ÈŽvšÏõYCézû-r|ÉSB,=¬Ëü|û§àç!=Á¶6—9À±ˆ©Ù™©êä¦=ÂBÍd§KHRãü;Tuxt…hKý0L¤ƒ¼ûçT¯‘ Ö¼5§¦ ­dÝ£$Å­¡éwÞ­ñ 9CþZvþ+Åý—ÉIŸ»ÅcØOÊäÛ•,'Y–l:-à‡Ioj<36Ri©6†÷[%zÒ‹$õz-Z?ƒl«a©uŒQBÛ±ªcV òŸDÎ^=-QÜa4¦î嵤é߇=ß úe B^wÝt‰´Õœ ‡5»CËO7QÔ%’„ÜÒñÜ7Øx…PF«g{VJ¦O´8—EfÌm’~½! OÄ"a BÆ´+TöÂE0@ººÞÞÍ.úÖœ+Œº‹ƒ…_(ÄéH ë"ÈéNîfÙÊuÈ} ú˓ТÔÈâ‘Ð?R£Ïà“Ø–¥ÌÇyŸÑ$ |ÛLr­Ð‡I…a?<ã–~ž&ÙÊ\Õ8šR ì°—j½rν8 Tzn7Eµd}l“7Sj5ñbиæ +T­ñ÷—à‚óN6®]Æ(KüÚç¾IÐm=\!ù&Ô?Z9:6Ñ90ËÖl 3Ð#úRòt³Å-Ñr‹“ä,îwWE¡ÊZ.×K‚+÷SÍy9 ª£täÍf¥ÍùK´ Ж‘ ~¯cö›ÿj2'1àÕgŽr<*ÚÁ˜Oî,Þ™“:4< N߯°ûùmÂÈ®b’1X÷R‹T¯@ý<:-¥ÍÛl×oþ®‘ BŠtó›éÐ[Q'Ê(Ïä׬¡ü 뢎zø–Új@_lÝ’F¡Çÿå‡Eã—/<&mYOl¥î83úí~Þ{P9¹¸]éŸtUO‘Wn¼xUÌúé»LÚý¸”rOéºåŸÀÛ-ÆEn#‘’·-:߸QuÝjsºw—+¶ƒÈË* -b\]ó[ÍÅÁOmª øîBŽó¦•P~üÚŠg¬C¡¿¤ øP™U¤Ômqþ!¾íñÕ©‡sïg¿GË?{Ä^\ËTuºo’.§õÇ—,MCæ ®uŸ¨æ$Ø£»U.•/‡”©¬8v¯IÈËiì&Œ³K;ÙûÀ «0 úŽÍ¼ù xÑfirˆÒ!ÃÖ9jkQ¢ÃAôNù"¼MšŽÝÒYŠzuUv.©zþ}Ê“_b‹ ýmüÌ‚¢~‡‹Ìmox+}u¾W­d5Ä1›¡rŠ«§jø±ö aÈSÑ ›_# .us…W8£­ æ»"›J0û•V2Ç—…­àûs°M süˆMü)¶Ì–—õÆÛò±H‰ZÇu,Mo'ýŒúø»34³…áë%º¸¨·3ŸÄÇŸ°·Êå“aUf‘Œ‰eÈq¿(¯±¢Ik –&3úwuÔb|®Ùp‡‡ìk’-4<ö¦‡$÷ÑÆ_޽Ðã«È&f–ŠÁúìDÑyV’½§b!kXȆ‚Ÿ´óÌÏ|i’ŠŽƒœGõõ΂bYó¡/Á|}ý¹cŒâ""Ο´+ˆ>B¼ÏÙ•‰×l»­7C"„ýÒ´²rË=º¯Mx¿ae¸ žÞH±ZÓZ©4dvé€ñ åûIYGÄ&5Ì‹.T{‡Þñ½òÖÉ?,¨ŸÊD¢ ÝŒþå!ëÄHÀ©ùíàtºìÊS3¬Úh¬@<§ƒÙfízý 毛t³–CZÙyv½Õñb,îFA„úŸËø×ÖjžçËAÃô‹*§xzKŸåÀ±%æßׯ5üŸfgòy:QJÍ;æªHoq¾â£ŒÂc\™üq™#á¡5WSY™>?\¸Ä"U*68~Nëá¾lò+Ê_ÉKw|j“lR®”x’D¬à*Måc¤c]ÎrOÁXÖ"C«ÊÄ­cØa•:cL5#ø¥¡‡°F Éé8ÔÖS ìí*`rÌŸDÔ~À·A=;!AÑÌ»/3Ä€éÍAmöýù2 ø:ΘßD*Ï0eg4Û~úø8: Ó£~BÉɾK[³}¯ÅiµÔƒËR/¨Ø¥Mlþ¨ï ã´ESÇ4‰r#)»gÎYVÚÌù.’ZÚ»ÖLöi¬³ÿµÕjwxljO ZGW™’x<Vgˆ—?¸f-Ê—ÁDÁÎM48˜C°?ô}y+¸Û‚ÓEÓ@švE0“Lðw~®Ö6›Ÿúð!Ù¨“ð½ux=Iª r.'ó°JUÉ ïÍ#÷¬H“,§i¢}Ђ¹ZXóЂßû páìÚÙµp”-Š/bÆÃ/^Òç;ƪ{¢¤íøŸŠ],À…PÄ´ëX𠯙².¦4ÆynTÆ\ÍÆÇ~3}LÍÏ…ðÇeOýçØü\W˜EI†3óÓB׊ Î#ÔêâoB>îlÔ0Áu•«o˜À‘ãp? ÖR”/4ïy¾H¬ðÛÓkEæJ»q7``RJ-FæÒØ’­UxnÂ4æ*Leµ)ÙLÇ\nç¡¢¡o šäÄjÞè7ãf ë:ì+1®Pn&…ņêÀ!Q¤Ðƶƒdô&ÚšV—Üö–õâ2#bØ@¢N¿ŽÐîc1= ·æf]v­ú4Òm{Œ¼ ÓŽê'2¼DƒýüAøi‹RO”íÂøž¥¥€+Ð+R€)¢ï ÓVÍ7˜ÊÓkNwiìƒy14½ÕY¸†½z¶~„_Mq†_ —?Ö¢•sO·4ðñ0|Óü|n h$úä?çÛ:©¼¡gÉo“†7L¯›5¦xéÁüëE¼8h-<„O÷ ý‚wy‰nb dV*ÍOÞ‹ŒìUè»Jðñ 2yI¶â¬ÈUøçx§.`»Nž[X‹¡ãÖ-g4Òý[w"êÖ#*ÿ(ÉÌOý_ýˆF2xý®^»î_B>ÏpkÄK\»ݦMN0‰[áÖW ¢‡Æòà(Qm[T¤âeì;ø”¤M0ð;-O?ÀÄAŸ­RVVÔÎsï{âÇVÚÍq‡I’?Áop¥ ã0¥áïK‘!D˜;˜¿Õí)ïN-Ê*$=³°©¸ 9Vó|ý³Î Žfˆ^êÁ£Ü]ü1#Ϩ¨£±þi¿Ê£Äƺ±¦F¤8äÐ!fŸë±ÁôÑêd´Vm\”{§°÷o ¤~AþÉüôÊò¶88ƒKlDà6>†[ˆï%¦]4ñ {åkeVò¤é6]Ë p—l$–ÒR172sèIµ~œ Á5P,Ã}Ë$V~"Û ¶¿.†AH3w¥4šF¾¶õ'ß½§ô;›T yhÙ½TzÞç§Ÿƒòhå3vpåTà…æg¿­¥Ø•Ék3`ÌÛl¥_ÚüôøŒÓ­ã]•W0²éC„Ø9éõHžq²”奘a<šœ¹!%,¹Æ /‘ÛéÒ¶8„®Wj3êÇîsÓݤl¾‹œÍ%¾M ÈgNÉØƒñT *¾ÕîLä1Q;4^Xõœ•·Ï½ÊñMz÷xåú°º0š"æNŠùò¶µÏ(àxJÙuF¯ÛV4Lø`á<ºó:5gê0ºz¥[G=¡ê+× ¥ºÞâ%h@dd«T|Y/q/[RÓw#}GOȳk“ Ù –,šMñó…Q¾Þûª²èæ&ƒ¶¾#ê¤8¨-¥ÍÙÑ¿>T)ž–M æ·yWSo~èDPÒ#ÿź0@ÕÇjûÆðV³ç:ÆsF¡¡²ÓíkO}l7e@Š"¤Wé,¥t…†õ5çfGÓiÙŒ¢+Z·«V—a`o õÆÜ.¨E*ž»"Äÿg9ëÝ…ûÊ…@f&—%åM(ÅÚPÇBœ5“S9ôˆ¤z.ý¥Òä™ñ=R†s§«àÓ0´öÉK ‘S¡Q%6 ;=È×oã¤r_Ù%ÐÔNm¬YIO¬”Z…v:îÔ ÞE k Û³kK•Â4¬Ú˜ ׃åÙAY¾œˆá’ÃÊHe[§§ç±å”|:—ó÷>Kff.·nz[zJŠšý¬à„þ»»IaznÑö’wœþÞ†Rp<*Å*ù,8wum@•ࡨ®ÅÔqñÐgÚ)Ù…1ÕÓÄ&všÎ Œ—Üw¶&˜ï¢„FJœáragzÆï%¯úä€Q ˆÎú´¹rªÜ.'­$Î?›C&ÙpÊÞõ¸÷!­aXHGÍ~ƒw :=D\ùP§²¢#L7,~I·Ø>^KdÓpÌÆ))i´eìör´Šª±•Q˜7Ž<«˜;²SæÀRçx; )WלP× ^¢=»}'7¢Äòôž¸“turþW¿: ý uººÄ¹†'¶jæ›§k2 ‰˜f¼hTJF©Õ u– Të_ƒ’_<»…œ±&d6š¿=ª¯›ÃPàpDéfb½M]/|ÓJ+A†‘!Hôݤ§i¬ÌdÊl^Kly˜‘¼p+¶˜‘02‘Ë7Üý­¢¥¥ÖÂνîZ7Ø*c¢Ãð 0CæÚÅÐþPT/&í­ãá4'|û¨1Š"_™W©rË¿p\€ÔCÖçUh#>]´N«¿"·8„gÞîõ°Ô‰cJÞ±róÇ⥹› “bVÛì,Äž L¿Ï…‘߬£I¯$Þ¶N¡ óÛ›¼M‘ËŸq‘hbñëÉÞ*,IntLùåF¹]ÇÈ ¯0ÅÖùd«P<°ìjˆs„0/Åÿ«µ$LÃ!)4F!cÌîÓ»iŽJwœæ¸®mnm?ØéJÊê¯z«h!²4WÅÆœ‰äÐèC.dëZ|Bº öFæt]qNi6(Œ#ÛU•¾{£,3?Fùùa’¢â­'÷Sz䑵­IepwÔrU ôžœ½‚Îv+žª¾¦L{ò´+Ц!²–Dk¼8JÅ8R> stream xÚtT”k×6Ý]Ò " ÒÝ Ò0Ì 0Ä 0CI—t#R’Ò¡H(!Ý H‰t|¨ç=ç;ïÿ¯õÿkÖzæÙ׎g_÷¾öÍÆ¬£Ï- †Û@”à0$7?Ÿ8@^SSU ÀÇ'ÈÃÇ'€ÇÆfE:Aþ‚ñØŒ n(&þ¿äÝ @ä¦DÞÅiÂa5w'¿ €ÿ±8¿ˆ8@€Oì?p7q€Ð hòÔà0Mîâíµ³GÞ}æ?¯'€_LLäÑït€¬3Ä š@¤=Äùî‹  @‚BÞÿ*Á!aDºˆóòzzzòý»EþµxÂ@77 7ÞÝèï,a€ÿ݆‚!^¿¥ àåÁ‘w)€;Î~[¸Þ¯1‹ðx•A,¯Ê?–0€WýKÀ«ù·Å7T^ç¿MaQ¯Ë݈áà¿¡Çw•N@„ýoä_MƒÜÝÜîXýÖÚ£ÿØ¿¯Ä ›ù= uxÚvV#Kçɽ1"¹Ÿ~f,À=Rd‰ƒìS³ZIÒÏÉžU/WšéåW²tèÐ’s=Ë]œúá³^ÇTï-tÂͤ´eÇd“ðåöu"Ù甞å q3JÁÓT9FñWn}(: Ñ$¸Ò`»>}6bßoz¦“=Ù)J•DÔÂÚ´Ú;kJ³5¨èÅŒvWõomÞlS?È[uŽY‹1LÓÊdQ—h?ÇKò¬&Y|?OÚËФæ¼qÀúIªøä=½‚vµÑüK¢«¼W;™d>6Êä2;ྊ%ÎÔ³7ZGöëG;Ì]{s›¨{qv‹5”“ü3 â“d†k~$š© ‡-RxñtH;zUÓ DÅ?/ “Tço[绬¡bÝY™©ÚCg½Âpb¯8òêë©ì0¶{¼hŸ~Øo§oΩ4íË>`yƒf©¯ÉÉù(?:xLWÿ47DGx¡jrq[7‹>:AGö^€M¥-ÖDÙ=Eí££õ´‡eËSÁ—˜B\`DÄ÷ šTðS·¹À˜#Ÿ_W¶ò $ùö½¹¬®Áj„øø©ËIw›ôAµ²¤´:‰ÝçQƒ…º@Dˆº§=XF³´ –|KhÒŽ’çÃFdãºдÆføÕo‹žƒT»É&1Æs8µ3‘*õdVm¬Hh]¬œÕ÷ã,³|N–€n“‹#Wéþd¾b_x:IM²RÆ]·.ìÞíøzûÖ‡ð†e?càVñ³óœšQ»C6L5‡¢»`ÿý9VßBR¦â,©ªúˆš<æÇæÇXý}ß0°|æ˜YfÁ  y.I¹õðŠf#Ú·F{¢­w7yÎÀh÷ ñôºK"Ñ÷n\ÖΜ”¶Þ³vaÄBà %Øc’ž2÷R!'B«¿¢· z Ô©è0“»d%‡p÷õ¦qò9áØ«bò $Z½i˜`Ží§(Ò¾£ÝDMDOa×…ï° $%ï\¸»¿cO'’&RóL¦F]{½ñÛoì²ZŒ;¸Ì1˜üùaÉ›hœS±…C±¯âvÑ9Åð¢k+,;¡£‹MØ;Ìéç~C¿ól'RL?LgÜ í[ Çò›ƒ\æ"^™ Í=Zý܃¯¡qwª÷ß4Äý„MVó–+õªê§Ž`ìMŽ6É©ô µÚŒß¹/³õJ'¤W€Ø¿´Y¾ï{Ä^˜€ Ýõ^=%¥<4‘á’üzjA …éÍ“(¡ü Ûª» hØ ;½ä‘´"¼ð›õ+RW½y•ç’ÇÌÙ¥„ýlÚÅ(ûá f1Ë {À’†R³ƒIéÒ6<[7\¸~߈ٞþ£«a,±Nz9Z¤QŽE!Ö~`õÆ›M‡M(ÿ|­Ç¹õD¶êÊO•êá_+$¶7u†<^'®dÇrëÔOü„kíyp%³Q»ek¬]£ú*WSU¢|ò†·5Å‚ä#jäÖgIB¿ÈTv·%¶^ˇ>)'À.â¶÷É; j°E§üXŠ{áná ËYcëá[þ&²ó4µ•ù@ƒbßËØÊÎ;÷»˜¨_ñÏêXÞóÓ@t]Ž0Rº]1v¼C×<Ü&i2Ü”àm»œûf«dâm¶lË@Ò/×!‰ISòcF˜Ä­Zè¸÷h¸BÖ0\yÓ…J×gåÂÔí>q—£UL¦æ¬wõØ89ÊrÐY³ÍØO8H ,"5zæšúþ£å§µzÞ.Q ­D¾c‘ð@2éÿÉa3A¾´²Ïßš?À©Ë«Ó­ •vDA C©.PYÀÑýq+JnÊkÄ )W1/Ö€Zqìe-Õf²FQö%Ÿ&#Ã3uqìMêwòÐŒ ¶ë¬qm §oãíŒA¯gÔwŸ6L”N1 ·Š&铵®}öž}á@ÓNÔo—[¤RÌÄŠàíÐÒš—.áÌJ—)¢¡¬^$=wU½ ÑìÛfÕeÒ,Ÿ’Ù½m#û.“àXy› „¹¯µš·ù$×Ê jZx~jï?!³&~á~x«á:/΋ɥ’ü“ô»Ò[„}qsÌã¥6Ó>ꇸÎRWéí¬¶Ê'nê¬ØÙm¯;)âªî‡Ü“Ÿ.¾Ð’m¹º7çAI_#‘Út¢<±Þ¥»£Õ©sŽ•›Nl-¾ 04 ¾î‹²õ¹àyk®ú%äeÏDI”4‹s OE©Ü•¢çkGp4ð Y§?Ø¥Àûm­ÍÙöSSÅ^_pwc.W<‰ƒj­7ˆ"nÓÖšÜÒžV|„WlçÓ¯! ï”mϾWi*\.…Z<´ZfÕç—c9¹O¢:廾ą¢=Yî|S´ötÆŸÜQ;òÊzï[ R¶™'Î6ïH³FtA¹è£+ßä’S¦;pr[pî$3%SbÄq9—H›ÈÞoBKØi¿ñ½¥~ì>nUšQ©P,Q-ã’o¼âHήãýXäãÚ£jw°ªáèTÉ3µðÌã}6Q¶öë—ŸÑ—k)äeGm3pU‚4ñ“Xž\YT¾£”/gæFŸëí>ëHåì}— N-²&L«Z17óV ¢Ñä—Ê¥®+[¢k¹K¾Ñíy’Y§ïøô*UZ¤•TCѹ‰E!~Œ8œ\÷‹Ðz†a¤Ì[¢*r䜼R¼júøS¡-¥±XPÖô¬¬¤< ´§ù,H LÔM÷R,ÎÔ˜qÖRkÈÀ4$7=YÏLy ö)Õ%hÝÁH”n¡Ø ¾']6£®=à¯.#ûJÅmùÎ ëȤÀÿܬex#ÙOÚÿD€Y\òñ5m_îU .Ëg;Uݯ;“@4n3 E’¯2e–”Ö¼k²ëêjªEþ寧>§l§¯–Õp£8ƹðIîÇ3ľ^ØS*×Ci‚=‡N«–&ñκq£°ŽSçÅ¢p‹vWc‡Å§hÞ+CKQ™Sã¶6ò(£hZÆ&ñSP£‡Ì‡ç~À=±OÃ}ƒeaBÜiÌã'Ô¤®z}“ðH€3á'|Ç>‘îÀÎA>LÃ)e7‚ýSíÃñK—¬±ÐòD¦/7=ñîC'µƒ¶$žÔµÐTDàå’±ÿêâyYýîqµ\ùJbB´A7–®— Ÿ/zÎÍ*bòÑÑ4ƒÊ×AEdmÉÝ×_ÆÄrÒªë„ev÷%ÂÅ¥(Æ¡C1æ@øçoF8ʪ>¬*޲·JÙ.>¼|’“ÖSÌŒ¯¤Ý¤º@$õàÞ˜†ËóÕ)Ø5§»uáÓ \PèoùJXl/ܾûœpuM3ƒ-Vê|ÄkLM Ô@£aᨺ6?µ'‰ö¶¬pPêTží²+¯ß¬×¹ýëã×j4J3#ä*ŸÌ”ä\'ñá¦xO¯Î×O¾ÄÕtM¢ï‰òûµ3æT­ÝJ4– ܾFWí®QYwEFaZĤ”(R–,P³™§ƒsY?v¤e³ñ°»—éCIh*˜èôQ‡~æL…òI€TЊnˆ7à²×>ˆÐÄS7}?9¼Ü­{åHÛ¤"¥í)3—¤ñè6¶t§¯ ‚õBùhª¨:zan÷¬M–…¬©èFÓ®‹¹ÉeWæAlq-8 6…Å î‹y16Ü2?g\ÚâÈ:Ô!‘£+¸® ºã)!Z¬ù]›£•]Úm°×AßIn!¼‡œƒ~ºÞÍD¿š£ÇƒûjàïÖ¾ˆÔ^.ݪÕûœ¤)Hr‹g¡ØÈY¥4ܦìt E¢gwàï› _ ·ešOPY7_D—?1û„îGn.­“ÅyÉYðÉïF3¿åÍôñhò#˨a¡*KU´U,;µh.©¯VÛ”üœãŠÀÊ”rUß-¹Ýk²bûÆy¢!j(³2YÁ©°E:ƒµ6û±ÏÃêä0Ÿ½\Y¡Õ»ž«øýüÕý4ozÏÇIýº !Àeö¬{Äðñ¥g OtO0CÀYoü•-ÄúYäí·âãDëŸézymÉ/­=ås4ïaWÉFS›·o7p¿7ÖQ@= ÿñv~¶“ý§L¬c–5äs¹Ñ—úª<‚±œ+ ^œ¶Þ/<”ú0™úFZs÷eÊÛÖ…`‰¦i1û×|'ôÂÉb‡Óë5eøËEǹõzò8°$Ý®ãŠQÙï“2MÒi)ù GnK «‰ÏühlDï(To%hLçdÆ;$ë1´ÑE,à©þXη7Å7^(Óé;yÕùgkÚ•Ü’ &ÂhÄmÑ?ä–Ò„ãÏk,EܶõÌ¥1µµuÞ°rL{nD“ÅèÈÓ[Ê;iÄÓl"kòz²rá BÖ¨]¢>= àüø™/½ð%ÜĆR^á³â¹bÑ’ÄèÉÃʸ¨Ç:ù6Q© ýÇFçéÌRevµ7i/=çæ)\¢ª–:ÞîWÒ®ã%Õ7t’¯raßx¬÷@=DE8iR%Têxš‘×´º‹¯I?½Lˆ;277̺Ì*¿!o-ã–@ß õ~Þñ,ÞÔ9ð;ÏzMÍšüó^'ø¨³‘íëÓ;âÛõï[m?…{ò 5f^…~|о­àéSŸÓߪ8IÑ쉲œ-ÆóõœÑ[óþÏòh1ì+¡9¨ ¤ áZùÆârU½óЪ΋ IQ§Êúé>&íû-ƒ9iª¾+ÁI2Ø9™$2¤­íÝqF÷ÛÈõŽNîCÎl¸2®¼K)ò¸GS&Ö*\ÉI|ˆ5Ã_ëMl6íâ°ú„nw¿È{ Q%÷âól™G•æôŽ£Y9ÂÈç­ö&Zˆrݳ®Š³µù¤¥@+”c ´'Ø V ìUg¡šO{\%º¸|Q3ٮ߂´Ã4Ç}6¥?(Åèã©t îNtÛ`OÐ8t8dY+¯zbɶöUé…Ph^yð©Òñ¡îG(ÍJů~ך¡eñ#ÞۘѡöËã~û³®÷}¯¡¶gBùs’«ï3¹çz ? îíw/eÎîÇü´šYZÂ=Qåh&NÙ4{ H‡5 ?˜ðËs¦ÿ®Ý]1^žÞ^^¯ºÖı,:%“öá³ÇíT!q=.ŸµêÐÍ›Æ×înõ¸Ó4–pBæš)õ¹^Ú|l½Xð ÍË:¦½6Ò~›QÛýç°Û^PÓÝsC²Jã}"÷k©&‡Î| Y­å“”å=(Ùý5²–=‹QÉÃq_K%òtÇ“% MÁ5[QΟð~’Š¿ñi(‡Q›0>Ü6<}<ô–†¨aëI -ãåºFf;3•'BŽåŠÏ‚Xq“-ý4è_X%ÈÏc7>ÒVã–¤ŽÆÅ,c¦ÿ—S&Q ®åÐÛ™X{7 $&¾|rÅœkrÒŽvhF³3„<"ë†e€™‚±”Cò`ÿR¼<Ri &‹í7Tƒu'_—+¡Ý®ŒƒXU/¦è]>áîzJT®ß¶5|î®X^¢ä±f*èÙÚ¬êgë_²žÕf1f£*P³QÁ[퉻^æZ.^9gvH¢ŒˆiÇ# (ãZ…í78F5àu3·‘DáóZÊãi­1^ZˆÇN—yDÑß "1m­ãœ„œØñÖ EDn…B”s# SRñO¿Ô4ãû¼|Å@-¨ÎFßì:léÒ–ƒ /³ªÒÑò'±Dï¼ç9¸­ÆÂƒ¦Ø@1’òêM S&Qó÷^a:½v"aË'ÃçpîA NKZSáóÖÏÙîfL?³]{ªŠçÛÃJ?8vöFžHô<Èg‹*'¸u2Ë<±ÒK|]Eá>ZƒO€…ÊõêÝÅ@0e«´NÊ`q V­æÒM¤ÖG{XÞ•@–§†iúdó¸råÓ‡ÍVKPt_‰Ã.â@ái¨L¢]ÐGÆ#]J£eÖ0Ã}nVmD¶ˆq¦ýÍó_\(ÃvN>’ZàVäSXeõFF1j¿¼íhz˜iè‹%ü21Ä4@\¯CyHY·.óp,Zߑ̵ã~ìH­.óFq—] VvÈÊ¿½oºHPž¯–èZåڋĂՎïq´0¤¡ÁQIl/=KÃGÎdR£…ÔëöB]0ú/½Så‡>òšKž#”ý’$·&O`äÒNþüójtŸÝ”œÙãù­.‰_MÒúüHˆ¾Æz÷þ4ŒÂ‚j0´BÅ÷-›¼“·¹—:¨…Ó?„Ø6”|E¡b“èf’à³æŒ|‰¾£[4"sÕûüþ¿,ÆgmqÅÎí×Ì¥¹‡MÚ“¢cý?5­Èé´án[$5޹P¥ÆÑü†™É‚«´«³üË Â›ˆéu*'—ŠT“´Ny†%œò¡æs¥\ñg±g§Øv}Ÿ¾ƒ ÷_Ùi™ÚÔêøôŸ«LÍ*Æì·½ŒzN@Ly1Ĥ›Î…sµá M&ÊdD¹}䕾»rЂ¡t¾†ìDÊ_xð;Ÿ,«JGð*á^pÏ:M-ÒxBb‘$5+¶Õ«ØíT2Á‚sþP´œ+HÓåÎKZ£Óƒ›‚’Öuáè|9r|åç1Žt½™ƒ_«ÐƒôF¬žSÙK"KýÉø’BñîÿïăöVƒÅkZòøëÂuHó/ñþœ”Õ}ãb¸­UºoIZ¼ý’¹3Žê~[‹ÒøÔîwŠò*Šc ^ô$Ë{»Ž¬¯4‚ºv"VOýORE(®¾E‰*4;Ù–Îü8Ëû„Cç»a÷ ?Æ« Ç÷Í#‘Ûjšûß݆aŒsÁLÃÜa)pöûG>ïþeÈÁ~ endstream endobj 1216 0 obj << /Length1 2744 /Length2 23837 /Length3 0 /Length 25365 /Filter /FlateDecode >> stream xÚŒ÷T” Û ÓÒÝ9´€tww7HÇÐ Ý Ý Ò„4Hw#!ÝÝ"¡tŸqïýnÝßÿ¯uÎb-˜ëÎë®ç¨ÉUÔEÍLR WFV&>€¸¢+ €……‰…… ‘šZÃÚÕø‘Z èìbíâûÃ@Ühâ –I˜¸‚í@97;+;€•‹•›…ÀÆÂÂû?Cg>€„‰»µ9@‘ çº R‹;8z9[[Z¹‚Óüï#ീ•——ûÍ_îQ{ ³µ™  hâj´g43±¨;˜Y]½þâµ€•««#3³‡‡“‰½ “ƒ³¥Ý€‡µ«@ ètvš~ P2±þ]"5@ÃÊÚåo¹ºƒ…«‡‰3ØY›A.`79ÐNP—U(;A+ümððOo¬L¬ÿ†ûÇûW kÐ_Î&fföŽ& /k%ÀÂÚP–R`rõt}0™ÿ24±sqû›¸›XÛ™˜‚ þbnU˜€ ü§<3gkGW&k»_%2ÿ î²$È\ÜÁÞruAüÅOÂÚhn»óß“µ9x€|þÖ s‹_E˜»92k‚¬Ü€²ÿ˜€Eˆ¿e–@W' 7/;èzšY1ÿ ¯áåüKÉúK ®ÀÏÇÑÁ`.ègmÿAôq1q\Ý€~>*þ‹YYæÖf®S ¥5ñwt°hñ7ßÙÚ ÇÞ=V˯Ÿ?€×ËÜdçõÛü¯ù2K¿U’ÒQcø»âubbžF#' €õ×’qƒ?øý7ŒŠ‰õ?4þð•Y8xÿf nÓÿ»ÿ³¯ÿ9:Àc)9€·xý{ÉõY8YÌÀ¿Xÿ?¯ú_.ÿÿ6üW”ÿ·%ÿ¿„¤ÜììþR¿þKÿÿ£6±·¶óúǼ´n®àPtŸèÿšjÿ>ZE ¹µ›ýÿÕʺš€Adi÷o­]¤¬=æ*Ö®fVoËßrÍ_Wfg ª8¸Xÿz¬Á£ù?:ði™Ù‚.à•üK_ÎSJ‚ÌÌ'ÀÄÙÙÄ Î_ænÎdXþÁñæÏÖÊËÑ úÃ,û#? ¸6@ðälÿ€ànÛýÁ£ø£Rð³˜ùwdN°+|ÙèÁµ;ü&vvø\Œão58˜#ø… úÏVp°þ#ýïNp€Y;‚±¿§Ìn„£›ËñÁ§ßkÎæäæà 47µûO vŽßŠÿ³y\ÿhþkÏûô¿Æ¬¿FûÇ`XÁ}þM†ìä´·þïêrþ²ºÿ1NpðëñߪÀMu±ûÏb²‚YýN ~ï0»Z9ÿØop#]=þpÇpû‚gêþ3óøcÁÞž@px¯? ¸‰Þ¿É#yÿNõŸg·™›3xf®½]ÁGô?ü×w% Ðh†¸4ï`ÆbSÒ~[#JäÁ¸7!8C½§ýŽÑgɹÃíõU ]uVІóµhÊH/úêŽäë+‘e²'Ÿã–†Wá­Éªm¾F‰jS{mˆ‹_q'‹ŽEëHˆ5Dö}Ÿœ|µm¡[ »ä¨óœÜxPU °n=ú¥=ëÊWÆÂæ÷T÷«¹ä‘˧c5cô?ÎRç›fÏáSÀ¹2’ÀÓcž{¢Í^]Ï`æN¾É%2 ú}e/öy»Éw7ç½öIƒÍ¥›€Šà-> ôæØØaªÞ‚Oiñêà¢g‹@1Y.Ê›´UFt¦C¶ÌjkµhPS_­ûØR'ën^ „–hk7¹¶¬ ÛÈ™B§ºÍ(˵–ÝHrØi!¶Ö~­Õca“F¼Ì;]ÿ˜Eѵ:hîñyhpZd¼ Kk½iÝéñÓþ(< LléÁJ/i¥µºÂ—I’[î:Õ­ ”ÅF³ìžÂók*àôCìžu»ˆ…å-läñ)gžï8¿ÊÆs¥ÎÍYŒ;Lƒà—`.¥Ó®´óó"+vI㬰×ù™’=‘ùëñ´ªüuÀÆÙàræóÍJ\&‰2/2…¤mÎÅCTŲÒ}{ U#QúA^6w¼…L§Z•šm œ…ªä»ß£Ç‡Å‚Cûy¯Í·¯+*Ä qŽ´îÎ+="ÄFâ¶4¸Cò#;Õr»]”Ó¥E£¡JnvæúL)O4ÄÜÉí›âÑ´5ïwÆ»K=Þ”ËJPÓ/)È „û.,J÷ÔˆàF^5°Õu(ß¾†@ÎB_‹£ÎÚ_¦4êiÒúñL(F¤®q[@é½ Ñ·0=¾Cþej‡ÊÇ®Rÿ#G3€Ÿ3&Ú.‘†|a' ãbCðuLÔ³ET󺦇hÃ2qmæì pãûðŒå«vl¡‰ï2€¢2Ú¬u…bì—ùä›mïl‘{²øfÁ*ýºuì+Ð Aýn]Hª áÍo_÷¹Rr§=¥óUACDQ»ÖÕÔóïsÈ¦Ø ðjõr20.wŠýéÈc,Bu‚àÍ1¢á!væh±‡ëâS¨a©°K擇0òÕbÐbl>E•C«f‚]ꯗ›€s-‡ éóá†KàªE¤ ÔúÚ÷µûxn^fŽ(ù"š¹lUjÁÒƒBŠó}¼Çõ*ßê—@U‰ƒ‰4$¤)ãwŸ²IYYÊ|áÓ_ÚŽìÏšî³ÖG¬Î×óB6*àkj2…GŒ…/¸Sq‘ŒÆò`õR:/x[cZWžiUÿÛ]Ï<éQy“ñ·bÒ9ˆ¤$^+¯Q£äiÃúØ”Yf´Òª¸dU¨¨ìŽî?53&ãmêuãÏÇG¢o‡á äÇhب-ß›V{‡ßȤ¿qsx§ø‰­ß{Ý-)=/|–‹>£¾e ¥bê…·k¢tC¸¿Pþ=®þ—É›-ýsË\×JᲸÉþ˜ƱGGò~;Už¹’¾xsfÑIJòõü¤H±6›'Ù!¹‚ùtÕ‘Ãñ»]V-æ˜a1A‘ÚËûr–¤Ý|ï;ª“»¯7CÔý•]S#8[ë[lå}€*£'aY«/hn‡ùbö§Rpx|¬¨ð‹©æðeÃ^\7AÝËë)”Ò|§úOš2Æã™šêiïÛRÞoø‚ôI»¯ÇžÚe­”îæ}v•1¨X¡ÜÍæìq`­Kºi†)¿³ïiÒž «Ä/ª´_5¥fYúKoœqüª??y#™Ùâª/Û®ƒZE’-ŸTK”N]Ly_ ÷”«\„ð7@Õ›ù# <.vB™ ÷)oÍq£šÜqìÁ·¬¤ôå»C±˜ÕñŠ C¦Žaü>kåc•ªì¸‡ZZü‹ùíã3¨(˜UÊLÊ9›ÖoÚyx*æIƒ¿÷……Zæ ê nŠPHmÞËKÝjä›>|HìÔ Œ³{mgYÕ“½l:]»FÞ|X>—:÷Eëé΄C•¯fì ‚wÛI«¸ùãX1 ÉÅÐö¤ÀÅ<.„êØÿª²ð ˆožX!Ç›À ã¼Ü)ª¸ <Ø]I¢3ZQš›—JVÁú™&YtÑ’h dÇå.‡/¥ÜøS@aïXe¼H9NTÔ=,Ù}Ú®€æ ñVwo¡viB{ùë^0MwK <à™'ƒÙÁziÚ Á4‡°W‘g¨ß[T¦x.—Ñ‹é§^žgËöš+«¨[ey6²£è$“G¡ú"›©Ç{3€kYÑ©ߊXb¬n i€"œôÝn?·£~‘‡'¦î¶4¢á§dÕøêa2&q®ÑjKªtãÍÖùQÀkRQd»&¬©SVãU7¦ 7†Ó%Šû !þó7þÞ# SÔˆmÕyžÐÃ,\‚0æ‡ 0µY¥<'OgÓ6–Ïö‰±žZ^WËSÙ”ÞïðÓ>:ºÿìAÉ& KL¿^(erã¤Â5ëŠWгÞ÷»–›‹PÞ”ò@|µU Ÿ–¯Ì›á/ìþ6›l(uÿi1Fé"ª’s«ØüùSïà dR%úã}{”À`I~ÊÎVV9´Kw ¯@£t<Џ¤q¨ÖQÕfÇH?5Žjò„T±ƒJGÿöF°?UyBÅ;{û ïï÷·±.¼á´Æ;•¤(ß—µïø”Þv™¹zßD&gŒœeH¢½JÃÆáYfç´O5˦}†Uç±:ø]™×ô¥pB¹$kt\»^ Ó`¹ÄØ«SØXmÝ/àH¾dý@åål/úrê’‚Ý;xñôvš>½M°ìfÔåêÜ!ÛTÄ'Ñk ž\\œ,ÚÏ žIÛÿíçïg¤û,x ¤MSÇPK•æTŒSú×Õ³™4 Ž]0˜ÍhvXȾ-ï2xï™FúS?3XL y{•º“mÕ‰yW†ç†]² »Ï¶ÃÃA}»h¿ZïÓ4)$ç!˜+²GL] Ç·ôX"…˽'… +â¥nðîGh.TzåƒØüѧd²Ôlwr–»Ã¦(©÷AÈk÷§e’&zA·*ž2¡y8¾ß^i?6ð¯H“Îc£ëbQ°‹]r.]<îßnÉèSÌTèÁݲ¦N¤Ÿ˜q*Ýò–; ±q˵‰=]4º0CŸF}¶|}Y扣úÕUH¯j›g4+–¬nþNú)(¶4&k@ Çz ¼˜iŰBÓS S°*×eÜ z§îüìe PTÑ•.›ûÊOÊ KlS6…§ *´¶1õšñ6+Q)»/¸iDBÆ&¼}ÇÇ'Ès5qŸ©Whùë|uuþ¤mZÕ²]??Mj5¥ÀÁrFÍO`ÅÔ®”w¦qÓP“pÁެ„ˆº MªÀ l{Ò) ÐÁƒ˜-D¬¿£U[Î>paR)JîåÕ¾Ã÷c†;ÇŒ¼Ðó65ÈtRñy>r‹ÙÂ}#5óøKÉÐ…tY*Få­…¢ËÔ«Y2mÍ'¿ÇëÆ¦fÝþÆXC¤€Ùj›ñ!r™Î³he™ø‘ñ82£»ÏÑü‡áu?ý·åšÝóQë V)©–^•£­ÐŠ[ r¦ „¨ã?‘´|©éù!’\‰Ÿaò©!€;]Ôß,*ìÈÎA²AñõÏx8gˆ¦”+Æ _Aº>6+Æì¾vPî$UÆ­´²vyOþ›µä{ ùW3*½£ß}ÞÀIV8œp494D \´:V¶…6În:ÍÜq¼½G®äqóZ¥rþ™ºv‘â†hágæÔÇÀÙãõŽüiÍ`.ûžè¶û;ªæ›JÈN×<º}k>™ŸyÊ¡ý+¯«Œ€ÊG$RZÏN_áp…>¹nö3JóElýè÷Î Í”y«O¯yâ¾Ø AŠòÕ{Çó‹X¬u€’ÆvógvAü*ãMáv{l¹¤[\Æöë‘Õ„@‹Éà'Ûf5¦ãÌ«'wÚ€!{&LÚqõ^‰¶±%;¯G2|îdÜdÝ«yñúÊû£FÃÏÕÒnœFÒ™¯n—XKÐ\™cf‘ž7cǶÏ79"kY+AFB~Žp ûå–¼VT$÷¥"gŠwÆ‹†Ó-Òò×üœpECÇm0»²ÎNg¢¥ì¢AºÖnŸz×vû~vL}ŸÆÔuF?"‘¸ºæ‹]6'}¥V ½HuÅ@>f,OxƒM·ÝjR^4Òjµ=É«7ûÑí^ýŸW>‰ £_C¾ÌD‡j×Ãr$ù³r°Þ6”g4‘ÓPp¡ŒìëÔ—vtN…å²Ýf~¾V¤ÝT‰ÞÛX𓽠mº± OŸÞòMœôO d±výl´ó_v A»ÝŠ@úÂ|úN†3¿qØ1h¸ÌEtÊœã5õ`lržY2Œ¥W=…n<Ý9&™SØëAØûÝ„”9ß{ßú§‚I¦ŸÍhÍÁˆÈCaԞ߀¿'Úþ™ögØWé{ p—¸, zTÔj;á·eÞÑ)£˜ÑBÍ<'dŽŒ S4Ã…ÐgòÆBã†Rê^ãÔ‚Óµ®—ráV÷/mƒ†ú‘ôI8óOª£[¥J¦¡ +íë!9±K5Ú½§.,¿YŽ›ìÆ%¸5HåM¥ ôaéÜ{­5—ú uOß5lyýÂ!¬ÃfЛÀQ*“1^¹ð3ð竓С.ëƒæÉÅ;ä›â¤¤¯ÜBßé‹.Òe@ 9P­¥•¢ÜG>ajÌl®OŠC—w.{%¶¼²:—I…eYSÐÛ/“O XK%:’ß?¦¢3}Û"ïþÚGA/·¢ÎÚ½¬KZ O|{f³‚BB3½$z(‡ÌP±ÑÕÒ¹Œ)x•ª”¿GÅå^§N¨¡‹I¹‚_¥öÂ1ññô@8b’öúûMß¿ž¹–´Âü†\œOÒÏE›†ÌÍeN }0#×V1hŸîîÞ’~ò‘(sAf¿bfdæ*.ŠÙÐ h[ï*¶G½,Œ¼¼ÛnžhIÈÍù¦µ¶ê ùM}wŽÆÔ>D²À‚úP˜ô^Å6Šb¦]þz†r"Q#¯ Uêæ^ÿ€ðéÆp6š„‰?¡Û÷›@B¿?EÆm–ëEuàéëÚlUöaS~OÊæ82ö 2õ1¾rSŒ“êfW¹ÄWÌB£ùÊ/§Y$ÎZ뽞5-píBtÛg¹=vÙwМèzù_¥øÑß(Ñ”ÒbY—Eé×*©öÈþ”™¿üJÖ-¬Áw"²(u†w ô‚ôJ]§g¥Và]›Õ¦ö<\`‡E‹”D“Uü Ób½¡:ì#i(ÈÃïé RÄ[¥fIœ¯â—Õ7HºH±j°ÀFïÞÙësööi}ÄÏ‹®'ÏϺ[œÆñxRïŒ2={bƒ¡5s|£iu’‡ÂC¤EÐ4çѹd‘ôÉÒCV¯…ùF´Œ F„æJxéeYüpgõ)|qàÏØ5—½Œ¸íJeY@-…^©l”ŽÒI&Dð =jgÝ{ÐU[bE}ÁqšåÛ4·¡,n©^ʼn°zå4„TœÕîâ€ÂØ"’„(-Í¿CQé«ú5j¿ü~ðö§·‹oh_a¿Â\ƒ:VT1_€Eùœ}ûÇ^Qö³øùsu$¶~A‚Äy½zó¦ÅäG¹,ýÕz\ÒJ⟸fß—ñïÐ|ᾸvÚ°N fŠ8?GáTuOU=ŒÉ¹÷¾‘'ó…DøÙ:™¢µž…øá1S5¤Aou]@³G‡&hyEØŒášz³áD©mUL“7ì6¸§2¶<‡¢o¾?«ÞòPã¨}m×дL{nåu= ÆîÓí!NTLòN¨!¶¹seŸ®w±@q žs¿¨¹¬8‘1sD "£ ’Ë[ÿ‹ÝO´±§¨,yBúñ@yF‚…5íbõ=•èñ*ÑriÚà~ÜþÕ{¼ú¯Óc’gl‹_eT¸{ðªIOtwµGë¤F0% 2†Å"·s©0! ~°Q ¨¶ìo¿Û‡¶2Ü"Ý9û^ã_8D¹<äc^âè1Ba}oýÌž×9y\ÓäýÅKÝàBPÅhç70²QЮªá¨Z¬¤¦÷1êFÙ¡èI[™«œÉ|p«’P„ü`!íPÔ° ï@©jU¼‰ŸÚuul>´v_¡Y»E¯+€rŒl;!#Fi:ÂHöNúI’?®œt8F)mZª§ûr×ÜáöÎj@bÑ R¼I†]´½‡8°ûf ÕJWœáó@.„u®ïóóð¨Áu#8’’ƒ1š²*b‹´:b»|^,Öè4K®-9Pü$5†ŠXÆæ¬àü´qnlêmf¹.•(ZcGĦ¹ˆÑØN5F…G»‹NtÈ=¦éÔÛzú±ŽŽÆ¶´šS¬ªÁq] /ÌÔ7¢ì·mÏ—TKÚ4¯ƒšEbÛW Påš®¼:Eä @œoº²óhV½gòc­¹(7×w±eã»kbbŽç.±BÇ-†¼”È‘()“Ù]c©8únæ0°§L¶Øú‰Ô5ù¡š ý†¢£d$ÐÇófã(3»¹Rà úÁ¶"U Wqì!°h¼]ºÉM‡ú©Â¨o ™%[öëÅÙâÛà6;‹–Õkœg›ú‡'®§ï´QFÛiV‰â Ÿ±·ëص2_pæu¡¢wÜ%÷yÍŽ¸=7Àßlϼ’Ð7„ürú›€1ý•4ó« óûF`{§+2 áì ÕaÇ'ÔØu/!¤hèõÉÅnó/™-RS%7žŒ¯õšžOvŠî‚Óìhë´×âm_±Bæh”)ßµË¬Š•er;ºêy(†§×V~yOl±&KäPë98ß|[Z5yµ‰M:b»Òtƒ9‘üi;n»ë Æà¦Eé¥ÀØbhœ–ÚµvG·!1SÔÁ^øšWÔô™8{¸Çañt’†­#S‹LÇE‘e„W‚­­lÙöl wV飞ý¿l°SëISsxé tÆ÷ŽJnõ‡ˆ¢v¹I]R4!Tâ†÷î ÊMÇNéìë¶$ôw ëþÅt&@¤2ÌwRò÷ŸÆ—ü˜$|ßð¿¢ÚwÑcv?ïßá0àÓyEè„l{@X‡^Õü†|­ðN>"FÍŠ¨jçí'³¬Pk![·®nÁ¶ÇÝ2êÑaÒ0½©lZòêjZõq;yösó˜=Rè W‡Ïä™!]-á¨o"!±±g{ÐÛý :¤P³/–Å‚ÊÎ^[I×°Ë& b+Ìy r3’¨“IáÑâ„ÓBøñÞì…wM¾Ì×6åhòs8‚ Ð×f€÷ét×#nµø~‡œº…ó÷x=è9ztD€fm“,Ý ï$HæÊ[ÄëäŒÍñÓˆFDÒš¹ûï—°ž[wÎ)¾U@Õµ¿* qMcÙA®Üâähžþh£˜°ÔkŒC(óŠü¾!ı8éëS›#w’$|鉹W…(”¤u=–’½q0­_T­…úFo'tÆÒw;Â>,ÜÀ¡ÒŽ‘ÒB?ç)DIôÓ7;G Þ®ižì0Ñc›ñ§d" ‡~H&Kï¸H÷S2½iV2UœÆÏs°Ó¯¯-0lá"q<ñ³>ôE6ö¥®n‹+¹ÀL|E;¸6Ë F¯3ò¾vL’ è‘»yÞÁµ‰Or&°˜ÕºùΜϋ“iPm}Qô°òÚÏÓÁå˜âo¦Pü •¦ÎÔC8El ß:Ê4xùljð¤œnE¥$ãùž ”Và|NñFàÎvªº'ÛµFÃñe „ª.]Ìq/๠`¡bà°² o Ãô¨ôqBX؆CËòjy·œ¹,QyÄlD ÙHì‘ôa¼Î"!W‹a¶×†’Ë‚M$ß)Ä´ ·4Þã6-jåûXò¡/1,Ÿ{}yB0Aëåýµtå>§W›±+D¢Ò‚÷‹‹dó£Ú¬ Òj>TSVHÓ¬ì×™K±5—T,†1–ú¨™WIg ›Üˆ‡¢Ó¤Ï£2.|ŒëÆ{amÍ…?a;ä“D«UAŸ;§£âžwá9ÂMüæ<= yÄP™3ógœ·Òk¨¨Þm t¿±Qi°Q®‹º`|\@oSþ‘Ðd\Ix8¬žQåDC¿×ŠÖˆ•*b0¿“¢týánƒO†G) ^gÙSÁ~Êf…hÔþÑzÃÞe‘ïlìÝõ÷óíÑ'k©ºóõs¾Ì0¢kÁ®O N°ˆOñ8pçälߤt¼OõdÞ¦µ#åüq½¨÷seØ¢þ*£¥õ=¼Áä¦ xd*ê·—¢öSŒB]ŸoÏbêoc »ìýÔÒ‰¢Ïõ%wP¤‰qææ—JÑQõ “…sðÑÐIñ•|3{“OäLY=K6³ÉmeÉߘæÜb3x-¤jÚŸÍñ³.Ì}¦<ÞŠ9­P ÷¶§îJ¿‚­k4 ¯)7èýÀt©tmY”%Ýëxç¶(Ç+Ë4øze_ým¦¤ÖîLßòçZxt<:ÚpÌ>¹É¥όHnf3û¹ícKù T •k;ªIË„1%W{ž"Ç Ž¶Z0Ó³ÓÊYk¹P±Cá*þÓ#‚Ô:ôPÕûOaK“,‰oä®íñQrËHßß¾íò˜Œ~Âø¤»qa7wÙkÓûž¶ú±È¬›Ñªp.r™D]MÊÀ)ìÑ—øö J„Õ”úZ:$ºôì@þA]=H*0Š«z†ÖGhÀúØhƒ¥7à}ƒÄn>ù¬âËɤœo3Ž’RÆZüí¤èÅ¡èÔ±œ6Ðwþ‹ÀüËTx°×cñÍÙ‰YI4ðS” 2‰p\ 9Wî®ÚM®Ýž"Ö©*UÒBáúíS`r»õ“¨²U­p£õ-u‡ËÆxñÅ0!ñ¦ÉéP÷ÙêÜÄ¡0ž82h_ÄÜÓPá‹ €·}ïnb§2¤`^•±_;ýŒzÃVáÒâ³§êÚŒqèBh0^+I =: Ì|Ëzú¶(ÆË8 ¡jIÃÃËÄÕêƒé1²ŸÕ¬Ë—#é赇!:Ÿ½öû v sx®¯ºÎ2\Êç­œ|ô” ¿cÉjýªºzÀ‡ËÖÜîý’,oå!Jáå·Ì…ýõ„fÜOްÚÚ¦b}Ä)t?•ZšdÍ&åcœË¶épæ[ÌÔ›‰iÑ_'½\åöæARSN4 ö”mK8˜$™2è}¥š^ʘ²bî¨'bÛö ƒ·®. !YZªº0\~3 £}7Ì÷e}Mt„ÿˆq`68KQÏê:W7†€N+,í§Ö rrtšØ+"ªË+ä<6)èbVÔKK(h™­‚U¨DȆŸ v(ßò »î?ËêUÐNºBw0®ŠŽ÷@ueZKYÒã’(l%£*¹Än„Þ‚ôÑyþÐ ù401¿¾ÿ…†o'ò»õð[P]zª«QÜ„…måè&Æóq˵ڰá¤C‰>l0¬^§M©ej™cÒÝîÃ4EÎ!Æ£ Ìà¾>ÔÛxsßõK¥QÍ"ÑëË*¼äsjîoÃÎséñ£–q€ IÌ‹ùW&YXêKÖ”›õKÍÜ%Ü~ÇÅ1–²÷X·¼¢ŽÅ]ÔAÊîøwÚ•ÊN«Ê¢8éZ8žŒÔ§x”p&&œõ[Gô²¦>¶.^–‰¢ÂMÝx>Ìu6+oâ×ÐáæÐvJI'eè'Í­C qöÏä~h™%p¬IIvbÃP\œâ8;ÀjJÿüAíƒÀ¿ž]“½/[wRNÍqãY´FÉÛyoÏÁP4f$ÜHÔñúæä¢P­rôDŽ#á™D“øŠ(Nd³Å £ùãîŒÆ´s†\Qž( ¡ÃñkZÄÞünŒ‘‰ÃOï™Ê?6E¶ò ~ Sº3з–*ŒÑh¯ÀýÙ,9Ö,"ýÁY5N¸YB´~yGXÕ"°úÁ'ÌúÚ°&TÏÕšSÞƒH/™‡$ ÚÆ«ÚA©ýpñÅ⇵±0 u#ÌkCÆc×n#¶Ýš†ò O?MÜ1Ñ~ű¸ GÕ>¿L…¯#)Þïæ,g)ǧ©k¿ð¾Í˜iè2´Za°Ô(Üá –ÇÔæÏ9ÊZó1ÇÁBOåSõª±‘E '‡<è]8*%}‰ ß§à5Ú¥€ÈÓxj 5ê[iT¬”Ý›ˆd Ñ1Ó,ËgÞ:)áœÛ™åùU ÿœéÍ„<‘E6*ÕÖwñÁÒÓ{] ƒ¬n"Ô8ØV¤e“ Áèk"iv0<ô™¤#cå…äƒ'ZU(S x÷¥;Íö ¾&¬Ñ13PWLœ‚U„çNE8¦Yá§Åb—’æe÷ýûs>Ç"oÑá/Ýær ø‚îÉâf ‡1ÃÁxklœ‡ºïq7òËKŠB‹æ€šðoZ2D1x•³mÖ ¯àçw¨ôžÑZJ]ó<ã4z~T†Ml}Ó3gåc|@3O“ñÙ€,Ÿ*OÐu³™ÌüE=„Ú{{°ný ŠŽì\¢•>®b|؆Ïç×ÞYT*Í‚vÚˆ9دúƒ°š»3¯ÝÕó^И¢¼7z}8>'8FyÌØ±©îf ØÜX ‰1EA§Št\z«`²êâßßµ”¨Fÿ,SI`ŠÄ£¬¼J˜Þ^RžqGc?'|ÿ±)ÙgK; æ¬Áç…ärë¤Ò yÏ9ßÉV±oѪC†Nh)ÃÄCâXøÎiÈ»»¿È}¿ZoÛ,¤”"½7Ÿ×Ó‘ÒC˜¬Ilm1þ‰ÿ:¯Y^½_ÐœÞ C‰,eE§( YFàüé"ºt;†xÙ-»UìÙ›Ü ¥DJÇïVçaH£‰Œ'®É$=QÓ†x3™ t>ðGA)æ•Ó 0Œ»n)꓾ÃQð­ÇæVGáØ;‡[Öšø¢Àž…JFÄ]çÑõ9ⲎØe‰ZÃÝòº0å™×·65x꨽|fñÚ"”å~úãÂF c…‘víYøµ§epºù£/ËSî(¦±UûË…ÃÅd´Næ7ÛçôÔÒ¥bÂó¦ vë•ä¶æUe–¶1'ÒÊŠ…-4m•àw͇ŽzNäsÓ à. Kµ+9’±:q¼]lL‚õ´ ý{:Þ¾ª„-CqÇÊ0Tzûþø ƒë‰òt™—ñU¶¾CìÆû†ù±´ d©)ò§Û†=«“$[Áú©&£ÒC5êv26ƒ%ªôH;‡ÆË‚°ØFbÆ• Td¼8˜XXЏº Áý¾Î–®ÕÕÇ·ê üV¿¨u±#K»­n“ƒåÇOÓw[µãúßvrBº7Äýå¶S ïYôû®‘¸!Ã<ᤨΪŠdø¼Õ“wÚÝitŠÈº‘¤œÓª¢Ãò,èÄ‹¶p¬.6VõK$‘µä|Nv‡¯©½ôG|hFȶí„>Pœ`^ætôøË(^,}óo©¶xÕ³7Â=s™SŒÛÏî-eÍÃÐyàuÖ§µæv¥•”Gt*/иÃ+CV±d–ÿfî¥(öû "»‰ñk3'h;' a»þ}o\ë ¿PÍEœ;Q$ê6:º¨È1•VãÕ%DâGzôŸeÊn6C’b-b5E$æ¶•çALOm‰y…:œwY£UuT[ذÙŸ(h:Z½»,RZ"‰ñ­É¦_µìjÅœ[Ú[ØÅí„ÝØ–>Ç ÂFghs$èßO„Á¯Æý0ÕxL?ƒŸaã.-ðŠ”?± Þžsº_Á#wÎA5ðN˜#ƒ,ŸûG‘Ž~p¥ƒ1Ïm¨R?Ñù–l±ˆq^EI Q©^¢.ƒiŠÇBí5ãggÕóÃ6§Ê-_‹ŽWð‹6³J¤ï-^—ÃN)ñ5jÿý 9ó bC˜]ñW³ëÑk™\öçoíÅ…nMd//Y]˜ qŠ;©è¸p¶©8"]Sy8¸–ùA¡¯ª‡Ðà3É/`k<üé¸9³)åRf`{¬HWoyN0’Ò œ;ô‘Ðm[ˆS/Þzœ¶€ªàV”+Zí>Œx–§‹Þä‘},ÊGÓ»?™Î¢÷Êc™¢í»{Ó±VÑ5¯ F‹@d—é°ÄÖà¯{©Z‘éQ’1ÔȺ¤)ph¶l—¨¶@&~à»xf±eÊ ª§'ÒŠù±ÿž‘™æÆðô¹¾„F’`û•æhëÄ,ÄÂs(¢/N¸z˶¥?ñFêt„û¬?O1Ÿ…ŽùY‘“ƒó)Ô'ÙÆSÄg~s+î¯ßp×'r+ØJv£Ê;Éóºâ S[dÊ¿0lÞÑË¥·ï‹éÛ ¡JŠ/3 Í2 oa*-½¢È‹ºŒðP(ç$<ÊÒÜðçm FÒì_gç«B`>°˜p¯Gˆ”¬ß ¹8*3Á} ¢ÓAÍDX÷?²¢1¨=ÐÈD ŒöíM‰±€×©®1TB¡Ø¿ºÜòI6È–1¯ô^ؑڼwÁñöc¢† žôÂε¡5ŸôÝG|¦Ö(: ¿¥Ù÷nžU@ăÝmÚ(Ô–ŽLž®`a°‘ïµQ‹½Ðíøî ŸQlýþÂaÉè,Á* ¿›Ð°øú¢ÒP6‡§UW¥ý2€@¼.sîf'¿0–@™-¡¤ÔtAyÊÅL áRh‹/„$_TÚ£cSVbXöbæ&v8oa:¬xˆÃÚÐ’ wÅéú‘Î}^ñG&Ïi$.»î‰«(j_F…XmåF?“Çó49 ­h­5ù²Á´ ì=Þø½m}³MP~ÝiU=‘èܧ)¢yRŠD6$^ÔöŸ«÷zŸÐåÂ0ðÑFD:JxY„°ÑÈR¥­’¸FG"³tIj¤î´Ù¦9¦øbχ6^×FV^ÂBwø Õ»FWQ榼z¤´L£‘ðU‘ÔP¨Qƒ@»/QÔbD•K^³¢ª/[žó^I£=““àKÁ®ÞP6ƒÖèÎçø¼¦÷ŠÈ&"؃Ðß)ÕÁºl]ÊqG©ˆ‘ÝëˆkØ•r9"6K ¨ëtVXÑe²¸\2,”Ü]Æl«ŸãºWÓz!ß~‰®üt+ò|Ñ>žâyœÏ!ôGˆ•þ¨Î-i2ù§zÓXôÝà–Q;vHLÈ¿ñ\ÔâH#Sõç3‰‹(8]ij.„$íô5šC‡È2®HÝ/sƒ“o[Úàœ…u}ÎÄÚ^ŽF®M©U¹0² QO!ýT‘Âk`qVQTg“£¼aé²´Ž…}Ÿàƒ%"ûÎ ]ʽc)]öDqµßÝR4 ?‡»â¯{Н7:繨¸Ã¾+f.ާüÞ“âðr0pC|aWµ—zÇVƒµç BYiUº½Z7= o(GŽ9tó}Ôš°×>È:Hú ùª^Ö»ÀFúóg{oÁay›^™äꛫ¨é-//É%çõM}C0ÈÙ{`·<‡%J¹IÈ^Ûâ™r}TÞñN3ŠÛÑE¹¼oÇ)Q£zŠþHJ*9§&þ ¢ ²ÜZF E/™ëIRe¡ìÃ-@€á¼_ÿ#‚¹mI'O¹Øcà¦(,ȱ.°/s¤ ùâYóÝvüT-úñ±@ÕLöF^ë ¾%p½ ‚+¨úÂH¶ÔÌÿ܉C2Oáäq}ÖyU4Aíä²ätÐËußÚÚ€†Ø)_c=LŠ/÷­à¶êwô}õ ðìõ–ν8í5Iì‰q…Ö¼ämêGaø:|Üyš%æDU²çü‚c¶:YKœXy5F½!¿³!Å®x F†¸Ès¬É·]Ú¼¶½}2IhÔKp½—õtêM“« ÁWDй.ÌwÕK…޹5› ëB¦ƒÙJ[y¬É®«/¬Ñ4ô.v½¼郤­)åõÚ7áLÑv•ÊOl„M"Ë\G¡»[hä{覡Å¥x3Gz!‡¢ñ¡Ú6,Ÿ9xÈ$û<2%éô®ŽÛ[*^1¥ô¼ƒ¨í””ËåáÁì¼ñÐ ¨ñÐNí£|ˆ©QqÐK°ƒå@cH6‚ïdïòdþ µŸ´ÓG˜:3JÒ¿}&PœÜP‘,–Ïp—sj÷ ÒIÛlr?Øg/“ÄÑSÕ-Å÷¾Ô̲j^6Ï¥ÖÊ2ícšM… °<8“ݘü‹ôu°w™ÞÊ9–ôŤÙwÍH…ZÈ8ék…ÞQ¹l|ꤙDæùŽ”&`vþódy#´%Z)‹‚†ØhèbK΄ˉô›Ï­ÀŠI¼Žgl× ,Áh[ûx÷Í{¬0ÞH1áŒc÷VâªÍÁÄXŒZ;y’ÅdÐÇ•ƒž.LÏ,Í)ï#â +–/8ð v°ô$k:§Š ²at¶ Qà ÆÕz&Ñæˆw™ßng'޽wyVÆ× ºlú›n|Ò*¦Z7Š4J±2Æ+¦ÝØ{uôPôQå³1gÙ¥àÝV®‹©o3:ã-ÂÏN#€'×ÊÝÖÓ|òÑ5Òœ“±^”1[tkóCEÍAmR3Þ6Q#Á )o ~C@Ý`÷8ÙÇÓÊXéNù¤¿ÖùÞÕØ2š×P·CuÝ_v“jIbvdËîî[Ú8ã÷Ø‚j~@-â&Ás<À´Î Æè¡IAa pêY{¼®Ü–È¥D»²z´`Ä 0È~¸b;É…®ÖR÷“Þ©ßxüŽð÷•ÓÖ·Ñ¥¬Ã¦,·Rìþz|ïkºHêsÔ„ãU÷±ýR´sßÔ鿝3’ìkïÚü¾ÑßEsîȱù-Ó/7Ø`1•\®q»Vxgº\ÜÜÒ»T„­ýTFù˜—¡Ñš?[Oñjh²•²õ8Ås¨¶±Y]^ÀÂß­±XÍÙ«©QuNáÒgý°~E`¶W쾂Àñp;iÜh®Õ'ëùH¾g|ý tÍ…9ߨæ+•-A>¢c¥jÇ(•Ð9Ù€OÑ%×áÁ¼COcÍ7 rÆ7nRv‡~‘Ï1kDý>™’Ö‡î=ï­Ûg“´þ*K(A»º¿°75EÇ I1%)ô ]µJÔ÷‚!óFT"¾ö@mõ|ç÷˱Ð(UŒ“ãõóß'Š&ý;Œ 6—cÐDk§°lLJãÌ&ÄoòZ²†ª9ŒÓª`ž‹0ô2 z ÅÍîàl5³0äðߥŒŽ)kÞÅì xB6´îó8õ!T]¹/¦C µ0ófA&ÚˆTe7Ãâå8§6¤vK³#‚+õ;â˜ÏÍ—?“ø0;Å¿`AIcm`åñT5˜ÅÉVÝQç="ó*ØÍÄ8Ÿµkª*çR!e ì€ø¨¨6 I#Ë3›è`O•û½öÍJ·@8=.‘ÙÚ›_‚Ñ#AGllÇyBGÓΆH ‚¶Uf·WšV®Š4¨‚f‡Ä# ¿‹€Äi]¾Í Ö¾IX(¸£Qwò¿ƃ¶Ë2^bjìôÙó‰Þd‚§9b%”BX¨@–<ÁPfÜ¡fÉÌg`ÆðqØ$¥Ñ–¯dÀ>I~kŠùòº‹ ÍþhpG}I[ö¾0³Ð¥èGQÿ’bƒô7î/12öiLØÔU28<ÐQ­~ôoÆmäÒ†Ýé“Áÿ•›Ž_ï‡Ûm ©mf9ƒ^ÞbßÊ+Càñ”RÒ•®­¿”ò†×ã#rœYÓÇeôéw—ï7·4»H•3нJ?†(Щb6JÑYW¶ËÞ²Žš.À"”ª×SrŸr©{SÀd¾5àiaš„¡”×íÊ5·m ê?×ÖÚ#Ã'cÏ"¶p&žÿhW_Ú&g;à"Šˆ•ƒçÔ¿Óæ }\ÀÐJnð&±ÙÙ]¢þ qRdE§ÿIsWñ²J.¾é*¼íö;Djy|q³SGÁK­†À!½ð³ì´H ߣ†:CÝOæüµÛF¦LŽ2»w¸ºc«´êŒøOÞÎz{Ãxžo¼”~ÔJˆ¯Fx{?-XÍ ëIgËáÝè«Ò‡m|›ÔÁÜ2&Á‡ã9sŒÄ±ÖÕk55?õØ€„I%'ƒþ²ÅfÝp°tÐJÔvèocð¦ÉY•;ÐÞË»ãÉIƒxr²O›a1"+¹ Aîü·ÜƒÊt¾»ê~Éå‰úf\·ëè´›UÃ{5>㦹xwæ{-¾wX¡s¹~JN²7íN_õܰ÷(7ýäž½;ýq~ A¿S†ãð_„ ]©LÈPú¦Bv?”7î|ò¤Ù(W¸«Ùd¡'VäœnU?¯Š8¾{RîÀ˜F´(ú>ÄßÖ:^›Äæ™{1Ñ+I5IS‚þħ‚Ž/•HWotë Š `½!GǾKƒßþó›ƒMbÍ‘MT›Õ¯W¤œs Ò¯s¤ÊºÈø ¹=‰e‘0VF"DU;¾öè«§wXNÿÌ.†¦%õv¡xš•#³I:<a-ª6Çv%Ö?oÛ^Oñˆj‘Hx³»—ÕEóɺ^ˆU!õ¥î ºµ$é‰^Z›ØI™ŽžÁ&÷C#óìZvÙ”Û×0Cޏ0Ð1fœË#àG¸`áuÐ0ÓímÁ+Ëɼ~´NªŒþ­tw‘¥Å­ º‘MÈ4íS+f +¸ka’+ «‚Iö´‘DuÝAar‘'H ¯ÔÞÕŸ¤§ÀN÷xkÊšÇhÃ…^ûÈ!¤ãPÊ$¶-mPS­âúq>åÞt[tâißN¦éq}—<0ê´°‰;º?³†—Š™^¿)áIÄÿG¡àiB-WE>¥š|÷Á¬XrLßãse$lS}[áz‹#¹$ †Ÿˆ›ë€ñ+zFøöp*ÆæìYÆ 5™^,.š4n²òá“é!±sùëro„´%½‘ôKþ T‘jÓR^WoGÙ[Ž@q{;í¥lèa¹æˆ?"S»xÛgôFŸÝ}‚÷ó2@¦Èõ874÷{I‡ÝA¬¦ç…-ZOã‡Â³0ÇuM*ï}ÝÂa·€’Ý/’.ŠÉì½Eœ;õô`<æbò– 7D©£>íIâjÍÎL©úãTˆ¢È¶YŽÂQX¹òŠˆæN˜ÀHìEbÁ;ò›æO–à!JÑæˆšÎ¯YeS¬mš $x0ÊmM/:éâ»1.ç /¿‘ñ<>ÄñÍíûñܯÇêàÐÆ,=ÁÆâï ‚É‘ ¾CÜ–º8üH‰••´×uý¾[IoE Uÿã·=hûúÄrXUÙï`.®pí¥åU*…åGÓZI×Oîõî ©ý9?z—ÿ?6!ÉÞ¦­Ð€Ú Ø ÷L H|~(ŠîF-SrÙsPÒGêèHj›÷R=’>VEø`G»åòxÖrÛBcêY®:úKCwÔÐ"Š7ÌõÑ/êb4‰Çd˜laŽú¬+‰¢ÂÒ79¹«[r³YBÉÖ‚œéLÉž\ÛõdÜ€u™‡¾N Ú5Ô;›®ÐÊ¢Ér"!¨ëã\¢00 ssý*?DÑtHdÅtÝŠ*«×)!ílï*™èD]ö÷øÇ %|‡ÄÃS¯²,)À7 ~ØUÀçÔk5U:ú˜oˆišd ¿u¹þP`ä'È¥ã¾amº-1à.óïìŸ=>b×q…PÖœÞí¶¦Õ ¾Šêбg7ɳ½‡la©T߆àXÕÛþe\¤·mt˜[©áØy”sHÕZ縬KiÄü±©Ä’Lø—¾­Ë¢ËñYM?~ä—¶êΰC†Þ%Ïv—‡!¢êßǯ”èßå RÅÛd†Ãu’šTòH%H£$zò’ LN‰#å@ÊÞ!*þ´ Ik\Ø5%ƒ¤=%OÚãF$)Þ”V(’Uù ´=ôR±žl_æ‰\8ã dB0À÷MKý{¬üì01ˆöí¢<«±°¿qÄHµæÖÐÊTC†Ò .‹øîKϬ[Ùp™¾ÀƒeÒ*×îy48vBQÏO Ûj‰K r7FDÜì8lðˆ ófN×xâýPÓbFLX•î†+×¥l,Õ@œÀwsW¥¢Û÷öˆö'`5Ô!ûs·Ï]“ÀÊ‚†×MœO’2©ø‘ÌÞU"zÄû0‚‰[a‰+µ‹â 0bãÒÉ`Ki8&礩á)©GÕŒ!ÑtnÂô\ŠùÇ~:eúèÍ…H³‹·ôP±8Å @WiÆ©ì²îÈ$ó®óåJgÏ™óËE°l§?Ð/…\ü¸çTjÂQF‘!UŠïÖTšŠèdHOÑoVø+ߌ·ã]9ÚUE!h’Í\›HÍãóAÈÂv|ùAw*²Ì…!ËŸÝÝÆÈQ[î×Ä51~«+)ªÆ{=å•\ðÇ{#WVk¢ÚI2n`©«þ ù0B We~<‡IÝLU\môÆ˦}ƒª3,ñ“û‡}Üλ8ðš¿ÒPsµÚ×6u—ukãš6ßöo~Áõyg½¶ƒpb™íT¾¯‡Õ”K§|—£ê~S ˆU€9¤8‹­šíø4³µcœZ£v¨ä ï[¬²†àD$û¿·‹Ð5ªÔñí\"jhÆõjÜG~–þf½‚¸n1-ÌÎýê%quÅ>G§ ì0Äó¥liΞ„îøªX OÙD®¯¿w\.ÁÝAõ”qchà‘0ÓªÐõ`F–‡õzï=cK¯¸_œ¼5‹ñ7#uz· ÷ÝÿÖÛ)þPä«q¢ÉF@wK¤} Jndâ0Á-^>ƒyPEÙ*“ûRdN¥÷ÂPæÆv¿$½@Á´õ»4îGV“o#q÷ÛP¾mÓÞɻޢOôÀê3Šj ë4Ð$üÍù ©pnÒ`ßÎU”~?]±bÕí‡;¢ê°A‹2«=[îTÔkÅ_©wB<Š%.6‹(]„ííÕëÌDw*M·ÐÀ¾àW„S(í eUaÜ0ªL9±5„ – èËB3Ô ÚßEý>¦$¦ê~ßü›m?>ˆ•|ôIv¶h“Ûârø8¤VÙ™#žmP›_W{›æ4ÉLÈfá¯,óm–Ü¡²ß^ÚšEk†Wï•7Á®¢¤3³¶õšaË›u€?ñ‰–ÕÍ*¿œ>ÒÞà  ƒc+ tjŠÅ!u5Å ÜÁ¶Ð×ÓâçžéÙ™ ¾Ë˜°”ÓùÇŽž“p‹ØéÎÅÞÑŒ£,¼­Ú™t2òäÙNå­Gøõ ÀcGTŠýlL÷éáö&¥÷…–ŽêÛf—®2NŽz¼)@1´Iûºƒ¨£v€‚>àÁ ¢š jžâ¼^ÖÉlƒñ{ßæ‚,O 6ñV踯Zñ7êÄ’†䙬6òá7ä"-f-ñ„ÓœS¬ÌÓkæ¡ý¶ùG¨ˆU…;ÛûyL£Õb‡¸š­"<@ÆÞ3Öq•$$bŒ¾ºó%– ï4Öm¿Ü0EHKþªèŠÖ[;fV²iv¾ÔB—ôŒß¬¥3ØsÄà‚Rb[ˆ’E»Á1{bÎ[,"Ö:}~_ÔZDl}¦s$qº£X #(V`9Ȥ•Q C»kTOö{¢l꜂Áÿ Á`tâ ¶„8ÄEP=2v GÑ]V°Û'¦¶<ågzÌæ2ø¹±¡·¢FH¹-jŽƒÿ™‚åOrÓ*5Þp >ÎùŽh‰ë:S#r_à/EŠúƒ‘i(òì6%-ŠÜoPa5Ìðר÷,¿Þ÷Ûÿq¯ÉYL—‚®jÚ+~k”8“Ò'³þ%-¾Ø‘`è_ðí*%•¨¦rZ×µ­*Ëï¡T†;_ê^|“ÖåÛk:Ã}óÎÃhg ÙLLr§uq޵U‰ ÿfûfÜ2l;’j¶§fÖö ®[ ÂÓÔcÄ\—#î‡H\2á&GM+ázÕo)ý—¡À5Ú™v5€ l{«¤38U {w‡¯ÇŪ‡AoFùU6Ía"“ØÈ1adPzÎIó9¯“gð;¢ÄW8ùà0iOeQ\ EA4l4µeø/ß+5Gž#Je°ülºƒŠ67˜AyZý'¥&Q47`閉ל÷Z)l.¸¦9g†P¹»¨“s's} 7„Ù=æRwè£åBQÝkÔ¯ÐÚPJ:õ¯ŒÆNܤ¹Ú‘)vö~ÆP'ò¨¤~1›¤ž¦ÇCÇªÛ ¸Š˜Í•PJ´3¥oÕ‰Á¸¿ó3nO1ñõ qE .±–ó+b SäI`cÏæã—iø£ðô2 ¹KÂzgn刪ˆêS“‰KÞûNέÏgÂôD”̨ô—ˆmu¢—ÉÏ•ÝÙH–B„ðôÂ…pÙÃi¨ þ™9¦vîT§—¬È &®Þ¯Ê‹zZa-Î J¦ìKCy™Ô™?­ñù>-ñݪ'QcË[eÇU'û;/oÚ"ãŠìÀ…·xlÇþÑ™ŽøÀÝ0¥hC¤˜„y¸³٬±ù­gF)ÙtäMÓ¡¦_ö}“-W'{ÊIéF¢ Î@ÞðˆWK=)áÀ5G/]T8W8“[^7t”PD놑Ç,ºf2j¶Â$„™ã^;±êOI!ML052SrKøÑf¥G‰KÍë‰È| ¯L ·Žî±Ãþã¡l“¸K4:Î0óD"÷ù*áÞÓ¡¡B;þë+He –î/ÖÄ]üøy½N»¯õ. % ,95AÕý²šUù¬UúˆÂñ¥ø¡&L6nøÇ”ë‚cÂá éñ8ÛìUMéËxžiÍ‹TÀÞ TC=òEúê¡|Š:¶tŸ (©öÛŸÚºû (L©V¦ÅFm"›†\ã¶O4(è‹Y¼ˆN;"ò9®ñætÁʂυx…×â‘m¨Ñ!‡—žœÀ’Vc\·n°˜›S¸w$WôŸŠ/SHœÈS´ïþG8üGNt˜Ùó=©‹ág‚÷e—©k.Ó®‹ÐŸÂjržþª0wÀÄõÇ+лuN‰»¢ݸßÕÏ+’ºåýÁˆ·Tßåbk誻҂Ævç\-Y± §!Œlt4âv š‰ðBkl¨w´lÛua¬aŠ‘½Sú¹AO HøÀÁ¾öw…,Œ\tâ>ÈÄ€/_£WK)ÍFâ‚V'¼m³F³@*þ(¤å1m•ñÎ ¦ ÞüޤÀ¶ýÒ’úÁåZ 1kÒÊä;4¿åäkŠOq²é°½Ý¼—åÞÛ)‹{Ú’Øõ}]³}Õ Ó ½®ÊE‚±µ»Ã‘_½‘ ½$ù!곯d ɼγ%I)g@\¿ ‚šC£F ¶rÖÇÌKujNNà‘;ÕÙ/ÚïWS5 Ðü{‹tlK!Jâ×t J‰°Ø$yråæeþçòÀNβ( $< ÿ)+"§Ý›{+‚w³+Œº´»,VE.»f"8 «,ª¥¹Ÿ>< ¢%TÁŒ¿Snw”hò£¬í ´‘ %x˜ñ>1 9©¨‡Gb†V Ú6cöG§XÅ£BéPÀ,‘WÝkuÙÛm‡ïk§À{TûØüÖ°.²”mKvDDYÝJª]dÕ²^r¢Í® Í$ÐÝ9mô¹;|“g&€õDW²ÜoCéÚJK¶@U ²¨gÁþºÑMª%o$ìé 6̽+ƒj&ÍRú7äIÿýb-jØ"ÌÌòúZr¦>4,£ÇÇñéTÅ2f«:ŽôV ÉßóŸ2d‰e{>  (/`ŠÂ &¥†•pó2¨Øú_HH.D%­ØcºŸç"ZË…øè,a&Úx/9L‹t&éiÿ‚@n¯øDÞÕx8÷ûáF›ïRc«™]4¾œ™üf?~ÂÞCû­­‚eK91O×^ÂQ¦µ 4û_ªz÷Ãì[÷çhÆ£¥A›6¨BÉRNa){ÐÎmŠä NÏŸ´Ôe@oD2ÚË÷³ Åÿã_|ë‡FÌqkéßOì<ôS«ctkµˆär5`†În¹<ê@@#^ØŠ[‚+FÊ ˆ,×¹:ºIRñÿs.³RôØGÎ{(-ÞØ¨Ë9]¼iê¯}‹0éHÀ@“PžÉv(ç *R¦Ð¦§ åqSíµÐx ¾U* ·$£A«Æ%h"-}µ·uÑXáÎbgÍu¿D&qfÓ‡ø“}Ÿ”=ˆ—× Lq´;b“µmõÍѵD1'øP *Æzk#ç[õÜXNJý0†–ãa-.ˆnC¡/gà%Ö7ð­ÅêÝɪî÷ä`ÕMÕ·'‰r‚A iN\Æž'W8¥¼ t$yr¯IðQÖ±ÊZ¹Ïÿt“Im2ÅÝ@ήþçH¬DvÅ gE·ý‹BˇpžÿÞ“gí(£œœ˜éP4.r·"/‹%¾Y=„ éÓ ¸šÅ"Ú:‚Æõž(w³&aíØ{Õp[¶eŸÖy#´|Ãrqɱβ³á¶KÓDÄÄϵ£é÷®×ѵÝqÝÇéŽï@j{&¹¨ûÒîu°ÿè¸)[ÊFoIkb¢!›9NS²©ˆS çhÕQtó3·å›ñÄecðøt,"ª¨sW M-7Tê¨ä}š®%émÀíÿ«Aë±m,­öQÝ»|Ò缈±ÚÅ& ×}°Ø5ÇCñBU÷XÌVÙ±u¹v•2|XÞn~¼`æìM”^J¹ÐCƒ/nPèä ßÍ"³üaˆ~sР†%kKV°æd”`x,·p¼,"Kú–×—^Õ7ÎN®ÑŠ ¾È|§…ÕF}åQÆÉeºRÔýOù©«Äa]ƒç’–:Õ=õ GâÞûrúËòn¿¢Ãóí0 /ÝLÁ듬©7#³í›gét春HPÒ3¬ØlãÞ7üÛùn³‚ Þ·žvÑ–DýùDI§™c Ã:3)ÿªµ—Õ½™D ÙPgXßÿ4¦t¿8ð‘MÝ#³³çÍ„3'±óÀ­67^MkDÒ1ú‡_xÏ ýj£¾Ab´0¡a¢ó‘ÈIwŸJÿýɴì:ÅÉP~E£IálÄ3” sHöÅ*ì+ÓÅ@{3Òôa¸çéÅè‡çU× :Ý*á*;¢Þ~ëü`ÉØ³Ê§!ÐukWlûÛWÃ:ôh¤«¾ŸáÛÐñ—w_Áó‘°DV1 èÙ¢I4$ßí8–À4Þ9ÛŸaÔRGé|Ð:\(¯çm&ÜAæ–¼)ÉÞ…psgž±äòÛy‡¯aYS‹]Vmó÷tÓDX4‚š:ŽÕàñîÉ­lÒøÌš!¼Qj£¨Œó !OÏh¨ ³¯ÃuGVè7Ð%׸Sê>«ð¥Ðl?ñÄ.x,×Nœx¦C+‚™_AuŽ.n ­¤‹t“*¤ ‘ü”_ªUuÌ~ÐUChá->÷¢Y¡Í†ÌCÓ£ßɘèqˆŽ1òd5VÄòîf½{Y]ftíÏ›Þ®éœ lmÌ£%?Pñ…4šÔèfãV½s@i‚ð§(ûàï†^¸[²*³Ë,·ä¥Üm‘–©fÚ‡FÔkÂ·ûb©YTç \‡_c°¼¦k8j3ƒ’ˆ7f2Ò>ksNR©Q3Ç?+š]Ä'–Ÿ5Ø ûô#HØã6IÚ冢 ¨¨Ïþ"0!ã¤y¸õÙऺʬdþ”cRh¡R=îT±¸oµk4¤¦4+l‚Vø©­xaÉE‘gNÆ1_¤¥}'S±(,SÄÃ|\«þ¸—m…¥‚'ìÁ•j#ý9Yw„ B¬2iÌÞë+"?£ªQÞQ …ó/m=Ͳœü™Ž‰W„¹×D$ßÖ:O¢•2;€¶5ðìžYxɉ4ÝÌsíw(]C|sjÔÇp • ÎÉ0ß'2MÄŸTÊ€Qdªì_¸(6 ô“âãp°þLÇWCeaO3Óã‰1Bò+jVòGó5ão¨]`J—1—‰óq¦ Þ‰úxÁŽø±,$TÐ$ské!1WûtCâ×ËGß„gôRä«ú‰ÛÍ$‹;à† ¯¤¬óò°:‚¯âýZaxë@©k»@ñ‘‹bTé»=UPŸ@§ëºŠÎ““Šš_žAåk¯OìÛ¯}£2žo[Uƒ¤ÁËêà±p•…$ÒóYžÃSC t³FÒбVÑ;5ó¹œøa›ícK>Á¦ø~’!ˆã§ž¦h.&¡ÞÌâV¿Ö—•:ãñÀz »«`gutž îžÀLÓ±…k+ì 8½AT+ãž „içiIõý|c€& |ÐNí)¯™Â´ŽòŽí~UýõqscwKú¾7ÎÚq±F,o ®ý·2­‰IO§à%ì© iŸüýâ±^¨>ϧ:VXþÜ’øWˆì[™vñ*FYvÁÌüÙÚb¼<¹Tm€‡rí¨‚Ê勤Gód;Ôzî¹9Þ2’­Ë{8±Àêdá*°7!štTµW?E)/‚ÀÓ8Ø“_ʰò·âëZXX(åB[cŸ/S‡'ëVöT7¼þ‚wq ºjÈvZJfHÒo*fïU(Ôsߧׯ¸àvXÉIÁ›zdFÃǃJr` øeÌvà¥ÉžÛ7všõrÊF™âT÷ѵXâ -ÊM$3÷8ÑóN[~o¸öç¾JšDUS~½QÈ´­°P·äÕŒ¸ÂílQZ+¿Ï&Ä+b”ò—aŸSWÆÝbÊ-5ÏÈ©=ò ä8àÔþk½†D¡Ä¢ˆ¾õlçfŸ¶ ˜o{D„ߺaÃHÞ™© ^iÁG©%©ÛL6‘Ж±3†ïÚ‰€ºkc‘ ~q¢ÚË‘Ð"¹©lK’×7GaƒÒìLKÉ)ûUx¤ñçBÜ¡âð%¬¨­ºóAû×’Ô¶|›†BrПµjôA ŠÍ÷eç-:§Ç«-ô¥ÃuÛµ¡¤«ºù®ùS,9®£[Ú¥Üdn Ò %&†€Æn”±îàoã Áþ(#GlÎt åÕTka•VžN³S¬¨ùaëˆ Ö!è— ºcxSèx›ëp//¿rfŽiÌãtˆß­Ù‡*^dâäƶM(³Ù@1Ú¼• UæD`[PÄKÕ+èG“§é©½ ±3•çjxm']|Œ½ð»;³þŠ6„†“¹s~°aÔ%Û3ŸÆ_ß1]ô—0Aq1oÉúñ”;‘F£Õ¯M|]­İÀ3^ìùü*À?æIíóõmüÙÞ\id?É/Ã@´ÈÆÁŸèÛÃnÍ(IÌ»ÚÑáË.S#´nêS}ÆGmI¹£ÅŸ¿J×ZÍ?_.¦*IÁÛs ïÅ!hW_ÊÛ.&¨ &Äb¬p›IÉYÀfXM›R†ÕœÍÿ1k µIÙ9Àx„‚Xe%¨×ª¬Ô\ØjGñ›¿‚B?:×ǘý»CÖpNžc~`›^l¦l™}¬¦‚ÅÀ`ÖêeTÄn6Fòj;y_Á6DÄéIˆNØNÌpô±ç…~0½}û`2/ìLãÛû-¼›·Ð™ ÅÉöÞ­8JôžŠ:OSÎt•¿Øs¼è·bžq™_ qI×ûzÎ%ö_Øá<]K÷´A²ƒ˜ààUFÌöòŸ Îaºî©Ù-©êŸ'Î^xË!¤Ž·¶oè‚BÊÞþ]<[†öI¶Ô."â¡Uù$¬ÅEï@W½ŽŠ/…êÙÆ× §±%N™]¨¨Á¥²MÇf²ÀåƒÓ#¦E×ù4c³O •×RôXþD<=€e”~}[ë™À”+•Ù¯½Zxz¯xE ÕÜ<.¾ ¤ÊÐdä>PŽNÌ„ªX ðše~Qõ®ü{޽I|¤ ø½MÌîr‘XçÒÇêUjivIæ¸ã½J6‚}ȾçÞ±Ù ÙFMÑz2šª’úŽåëZ_Û–X^ß—ðÞu`CíÀV×ÚH ñÂbÉe»D·Ž§‹ÍÅiBÈŒ±¶?‡p a6}Ìîм¸j‘“õ³¬~=4zºl-ÿ¾©lÃ_ïE5øIŒóLšÑó…ñQ%¿{ºP©g·8#¹b-onîÍZ£˜? –2X•F#iæÝszŒ¦dWsà¸2Ùqk@V6X»@‰^}T‡pG ù;[Dý¶Ìô \ŒHçøˆHy*wÊùïß"PÆÁõÕ¯ƒškTJÉYŒãT1IȈUc³ž¾3cü#GƒS ÓÅkói‰¤¼¢H ›ŽìX‹]™)šú²„¨U’(ß=‡™{О21 ¿€EeœW÷g¸+¢üLˆù8ul^¯_ƒQU€¯*wÆejJiù%ÆÇÅúG‘1H-ýNI¾û poêáU¸ƒÿ·AßÚ"þ[®[:Æ™¿epŠÎÃ3ƒO¦öýÜ"ô´­3¿ .&@¾3Ýe£Ì‹ KA}‹¾Ûér»S*¢Ä{9ä|#?Á­‰ x]0,8ï ÝK.Õ]ÿëd¢Žëu8Z¦ EJ^@a`Á$/!oim“—–â>?_DxXèNµfªå0/ m–`{etâ›f¿ŒàQ’]áÃ?F¾gQsÏûØÎVÃW;Êÿ ? ÅÐÎ8|tötÕpÛ¼íÁ^Æì»p<¯éÍ%]wþl~@Ô¦â_âÕ.(eÍúér¾òb‘h8Õ•P%ŠußGÌö!f&*’kOþ> stream xÚvTlû7%1:”–IH³énI ©1ŒØ`ŒNA)IIIiE”A¤S:¥$U@šÿÔçyŸÿó~ß9ßwvÎv_¿+î+~×}ÆuKßHPÑeWC!1‚!°4PY×P‹ÁÂ..cÆþp݃£=(¤ôÿÒ+£áP Sb°fº($PËËBÄ¥!Ò`0P –úÛ…–ª@½ö@]!  ÷p)£ÜýÐG' ö–¿@/"%%!ðÛ¨èG#`P$PŠq‚»ao„A]F(ŽñûW' Æ]òññ‚ºy ¡ÐŽr¼@Æ h÷„£½áöÀ_åõ nðß… ¸€ÆNÏ?°ÊãEÃXÀƒ#=±^H{8ˆ½h¤©¼ëGþ1Öùc ü«5@ˆä?áþòþüí …ÁPnîP¤ét@¸ÂwÕt„0¾ iÿËêê‰ÂúC½¡W¨ÖàwâP š¢Š­ï¯êK<üëóŸ“–[ö(¤«ß?濇 RÕÑU×Ñãÿ]ðTJJ(_`€ °PPX „@„…ØCп£èCeþÇWé€JýIÛ¥¿öþkú<-/ðß±ôPXÆÂ<ÿÜ,†a¿ ÿß4ÿíòc÷¯(ÿ‚ÿw>j^®®¿µ<¿Ôÿ‡ê†põûKå«Ë}]vÿmj ÿ³®ºp{„—Ûk51Pì("]ÿÓD„§Ân¯ÀÀœþPånòkÁ\H¸>ÊñëA BÀàÿÒa· æ‚}4<±|ü­‚c—æßWª"a(û_Û%,&„¢ÑP?vÄXI Á®¡=Ü÷7ƒ !$ ƒubË : Ð€_ó‡Ap/l×±ðoDLr@`Iü7 *a_®d¬»«—ç?Ø'4ül¶ ŒêI ÈŽþü+˜ÝÞßüÂ÷·üû©€Ã}á0ÀÔ vç¡óÛ‡Ž+™}WdG¹VM3x¦Ð^§D©¼¯³ÂÐGŠ©=mT³+ª<‡ Ól[韛"ë“ ÎÏm’ ‡W“C7>¾ØR¬êd%a4VX ¼ð¼÷Àÿ=n³W®‡—$…~>í±O‡ºoUgÙL_ÄĪÁÚkqmÒó²Á8“XËÅc\yvÏÇØ 1‚¬Ä|4û¾”c‡G£49ƒWlZIü€ í8‘‹Eáø“qÿ¹—ÆÂž-ŒœŒ ¬ø‡4}÷”6Ò´è?”ÎŒYzE‹Ì¶àX©O,“HÈø!’$ßÈwãßZs\ú¹ÝLZ׋Pª˜N{±v!PRáŽ'¶¶~>Ìé¡Ú ˜`-£©}ËÞ|þBBù¸úéõeñèP-Ž[L²²‡Ü)lûèÇÓÞlrÓlêŒi·"@äläjºÕÁ ·›Ì|yˆÇ<Ùì·¥­9íP1Z9²Î‚sûd-ëòšGÌŒûƒVaÖùÿuzz¦>f’ï5üQ.N¥£xÎw}6g=¶ñHö]n $¯Ùȇ>í»ì‰‚ÝdOFÊ Œ›F%óf'§?f£ma`Å/"‰siO[‹IµÝ‰³xõ.¥t`DCNšÆ×/ŸZC $ú’²jÚéˆjJÚMºgúTñÖ®!é÷ì©åUËK:¡õ®ûtô,TŸìÞîjÉÉÄw„KR­óÞøþÛ–ÌšVÕr^ñî×Ó}Rg%=‡Ç­3-uáú=Ʊ“„õE#PνMªWä=^*öt“"ñÄGéJŒF~^¢dÙ%¾m‹EõK Ãz'2—9±Iæ‘å<³%—T úQÍÌ÷r\ÌçA£!€Iî™Uã§W¼¥Á×95¹®<ŸèkrT êÒ$nÜóu hóíÜV˜ÿ06“Ek± %îº÷jyZÖIqºra Pšª™#e7á]?O†7Y^°Pæíà¶åu²‚“{6®Âô_+ùt2å;àÈ.×ÚCb¾Î©?ãh‡|nQ°P ö3C7¥ªTܵH,QíLœ•ÝJæá².i ßk©£ç­kbzþu¤³ë ÏÂþŽÛ^=£C=#Ñ5Ãxa0ƒí|ô;c·îÑÚx'ŸXÂÈýµ'uYÝÞ°õ¾)ÌÚ?Ÿ$á·Þ¬›ðV¬ú@©ö^ªû²•y³lÓôUÄëùaZó‚¨ût\ÎwZ¹­¬yKl˜ <å`ï–OÞ¨õf2Ù ÝdGá¤w þÁ°¨€`A¼íۇцbyaôÊvº|¼J•Ü£5­úy\9 q•`^n ±¯êÎ.óp6#îFb>ŸêÃREF˜ù?8€_Oèô¢&´Sn0*Š[6÷Á».M­3–v€ƒU_¤2»§;2¬2W8 B r*«z>í\±…'z8f¡÷I€óúP;˜ÏçA½ü%îÁ»iÕ¹ReLwÕŠ×xŸéûQJDÍZ׸y1«ífMv ŸÆä¥¼¬ô vo#”¹g­íŠÏ6à/ÁïgÅ vÕBIJuªã¼µÎ/ï:š”¢œ)Ö?Ä´eØ&ZZS2]=;ã/´Êæ„všqë+;§L«)ÂùR朌vgeµŸ†R3ö((s>o±h¬9~v8§lç—-£öÛ»z€Yíí˲JÙ¼$}j4„:ËSˆ%ùqŸB}ÎÊ· [Lêí³Ú „{1ô€è,÷8˜ýS3pšÖ¾“„ÚÆ*{žoœj5ã0ÀÂd3°ŸT$~»ÅLi½ýf õXîK9%›èmbõNyt¡e xf ÅÓn^¸O[CÒl{†?zL)¶>“+ò¨Õ™¾x«ú¥48À‹Qp³=Hñ&ÑŒsP€‡ˆ©µN)÷ó9ž ZóBœn'$x´Ãp#ÁhIÇ‹ægºƒìo;Ý¢“­²65*‘„¬^ÿ$;ÕX7Û•Á»•PãùZvÃÍ2ìAXj³µ«µº“^7Û$¡ÂÙÖ"Kz¢'¹/Aéøõä)–7v§º‘¸iø¾×rã—uНÊYÝB6+æ¾ÈÊ®|Ê&Ðð©zµ-4aèë¦'ÊXï²°ÆC‡ãC›ùÞU¬{BU†ßœ3³¶d©ŠÃX…\màU/?=t¿ØéÇìøÍ‘0- v(åN¸Å—P›ô×ZZË÷Už– ¥íb†5©3TGwq{I£­Ä9tž®ßûZ1ž\>ï,qjíiùqÈ.À±3ºC¿VÌ,øàô:àHzÅînúÌýo¼Ô»¯>)šáM«n5¤t\ÿ4qÌ‘q©ñ(ÆÑal¯R*_›øÄçür´žÚ‰bB3–›ŒóZ“´´›PÈ#«Ìݨ b&·tØ\õÒ‚ÝLo¤ÐÎYÝæ”çík冗"F¶³ÎÇŽÞ=N{×{ÇRrOÌ+xwõ¾4¿ºr¨ôÁ[5~v=*ÀÐ(SÈV¤E†cº"FÁh0pûh0Çm†_¶²ì^­¡i®þТÈ÷À3¼\w·§`ö†Â&{‰õÚÏMŒÝ÷ï™eï¥ a_«}j B×ú½7Î-¨fp˜®içºÞ~ìÏvøH]wÑ xL6^¿wOeÐç˵±{—ùGw­•#2Æ(ؼÁséÝçäÍ•’éñSà@yvn4ÕF¯¥˜´”™É0Ð9Ï0sÁ‘ÃjÏÔ£&kÏ¢®$i¥!ôYk/rt4WÿùÆž{v4ñÖ[gþ®å®n˧Éý)!~©ëe©VC”w‹˜f|TáO܉ïý8 ¾<×´²°¹ž®©A5­ÙßÓâT¨Ü{|³1‚>–”ïk SS¦ŸÏþ *j2íÊÁ[ßóÇ)À["ÇøÞéBj6¬fŠiyjAGÅL•ü¬ñ¨‚bMåÆF…ýï¦z¬‡xT†Ä2³g]¢5{‚{fÙ8‹å<׈æw ¯+ÍJNê»KÄNK7¨Þh6ÆOâÉÑöù][{‹R®žÛgS–mQ:‘ß-øÐÊnE] hu´é®=ûé!¤D¢úÓÅï äÍbìúDÃç‚0?áÙ-—ø xcÓWït!Á[·“uì-úƒ„#LdR m‰LJ í6Xsõó±VÝèU™ ܳ¯Úy(ñ0Þ²ûŠŒ\EFÒëlu½Hê¯ÕD{œš;Gøõ‰ë7:¦y}›«=Ì*¯ÿ‡vLj¢N 7¬,æð+Îá<É,ËBdîc7:#B9ºVÁ籓IñdwB–ïBðW§ó§ÚjPµÈc'–ýBc÷&æÔø{}DhçrÒ¿ðšQr°ÖäKzú‹~3‹fËa·L郯 ÉP Õ{…ƒ³äLÌù16× f, óþˆåD˜ù³ñ42xWh§<ø°¹—95°Ì¦ó&í>ÃBbÝ¥Ë Ï+µ+7rE’/ûœÅGä„]È'xSÄHiòå­þôïýžó’HøVæ"ÈÓRuS›*ï{n¨œ7œTüàX}}8Ó‚R=ÓÕ‚ÝK‘e}U-tLUœñO²J¤}²!m0øIìnØM>È€PA)=É’ ÌÍErâ Û]¿×žÙdÊv°WCg¸ïµÿÌzû½Uµ„0GÄ«æÈý—_ ºÕwFª7Ä* RïfOí™|’–G½ò «¢2µ¤¼ütýÛ*[ŽG ^=½þÎ'ŒÌáu'Ü•š¶®þ%Cï×)UípÂ:×ê-Äèd™åÚ3OÒ‰žîwNdÑp\op2¢1T¬Ú–î˜' '¾;.ïJÉî1ÏC9¬òõnDä¡—Ë!¾¨MÛLW6G)N¡­^sÔ)X¯œ(ŒªÁFyõ唒̲l¹ã–ö] èÚxkçVäX2­Vï«ÏŒRB‘]†½%~"g¢¢o®ÈtªŸ¶§'ƒ7BËÂ^M÷—y5Äh½qöQd€Híwk[›Jè\áòÔŒ4»hlH¢;Cè·•A±7ºmˆ•o¯Ü¢%k|qlw´¾±ûv­Ö+¤ölùž=Êø½M¹*gDqp˜FÇByëÝWŠEª„DÞb¯KxÁÆÜ"ÑŸL>•ag3áÕÍ èÇ2!Õï /ŽS­$jÓW.Rך)d©Ä£¶`Á79l_ tmë4¿; À¡ØÖÇãÄFëng?[ J <^µÐk0éú¿u‹cÜ`¤‘R¹2-[³ð>x Åü“˜M³Ì© ¡EvúJeÕGíŒK½X"úÕO¬±»F¯Mr v&d'ÈŸ;H¹—¸I& ŠûS™ t38â}¥ÊZW·Ïß xÊÆ¤¨µ~K”Dff(¸Äut‚ÖF¸w'Ŵƹ¬Á^÷n{3Ûœ˜U£7x)s{{ãé l¾n™Tr ì‡C]à£Hù²ÕÔZ€9«¡BK8žUæa5£¾°S!è³éV¯Ù7ï™æds@Ï9þ÷)þ–ä;Hí¬©:­´±|tå¶õ‚q²Pþ7ø­ßÓ3÷*œ;‡úf4¾ÿ0ÅXÆþÜý8ô]½E+ÜÁ•q{µiKñéw‡9¨˜Š2g©øûeWÇĦ‹ÔZ>Ñ=PmË §î"syÑ¥Û²='QUr ' 8–¾6á*…ΞWD‘ó0ïúˆDYn>µ4Ë^QìnÎ Í´í³z½“˜ì±>- iæM ;x”cß(N $¡VZÄLj‰Ùg®1À³ÔÛßDŸ2…{„U¤½e[Âñ3f^hYÈÖëÜT°läÂÿHW¶Ù–k§å4;”„)}¯ãv +ÌAæÜ|k¡÷MbX•€Ì) 2lL„Ì)ù“¯m>¥·ÊŠýül½m]r”XµàÐÅympkÖ éÂþ„ù³X±óH86øåŠÝã„CÕŠGR?¢8ZÕÒÜÌgJ׃õTÜ_¥³‹[p};Ò QwbœË¾û‹ädM[^ò¥PUÀõ,…R†¬÷3?æ‹´ƒa›¢Se;I8Úó篭«BH—Dìö¸”˜8Ëtík·9%y¶<“ë2…™_íK §ëÝþîAMÐ?+šq˜È™(¹gî]ÕöQ£–ð=½0ŒQMÊ/ŸP^*ÞóEnÙ3`ÿö»ŠRr3j²/go9¾øÒhhð«pÅz[›Þ“¿G,Ò)‚¯GªöhôA–Ô.Q.à>;{C Úí%<+*}+£7`rìRD‡I"aÝ1ëyWUú‡-C[mÉ7l–Çû»Ó©¡`§ÃÜ7ÀP™Š+Iº¼Gä~á“RQ½–ôN¶U"Þ[¿ê‚èÌCúZ>âÄ¡ªTnR³Ûûáªk€ë'ÄVß»œ·¯9ó§R²ÎÁ›¬\pj`k:»ðîƒQ%ã{Oè5JgÌéù[ܵ‚Œ =oÝÜ›´E"JzÌ]@ó=ÉærÚjøŒ Ìuê•ômî‡i˜(Ñt8:¬m÷›X‚™©Kâ·ïûöÍà'€ðüÜWIÞ¹Ò:¹LFßO4“]«^C½îÖM O9¼|†dDW쨮¹ñ•¹¿j{¤—Ðàp«¥à —»èH‘'ÄjkÏÞYNÃPòMº¼J=É䉮cŒ5l7¡ë¡¢·ñ}†·xeÛ§ÆA±°Úœ0€“ c2_bRè ácB½Ñnž)âq±­ =}óÎ-¿Rúx%ÜyÍu! >e©_D\0’Öµ|LžþÁþT¸UÙ8ngõÛ1Qïû5…ŒtŸZÞM‚¿Ù£w#E¥T1}ÙÙàø>2c˜›rZê.tÿË®Éç`Jy94¾ÕÄø‚çél4Gïn+”SüÆÐRà)˜1¼}t6,ó°¡‘é¢Î XÐ›Ž í ´µ)ã2@\àÆvmºjtÏí¯ÇT…Ó'{FöÔ±±Ž ŸJÌ´=ÁíÇ1x(¼>[|b‘#`?¶M 3-a¿)Ø|r;h€Cê sul_Ô!ËGÊ¥ ·â ‰®n˜¦T2¶ÊÅ^:¶O¡ØÞsy„@‡4Ä´a§ú«±¬r ™GÇî9ÆL;8ù $;YDâÕŸìê•Èê)Û½£(òV­B[÷tç-ÈÁú‘›õî®##Š÷¸ÝKj$n¯~›‰Ðæu´–âdc\„];üöXÏæÝe·Há÷òº; ÏÉ_¬kÞ7¢{;E”ïõv0eýhõ¸ÈêãÙp›È‹ÿ¨nÃÌ7¿|q~oÆÔ ÔÇaÀkrëá83s¶»úª}ÛZñõroä’îù‹H%WÿüÙÀQ¸õJ»Q×ì·øû9¾½æk9²}—NYx§:ÂŽlL¤Ô%¤÷£ þ-¥±\ Vwú®‘…HT—Pß~»ñ"¼..…•ÇøCBÌÈ¥€GåõíkÖ·¯|Õ­àú0Aÿù‘KÇÄ’Á˺[„‡ïâön³3¿æÑœí³yòæš÷n•:QŠ<++çÒj_Ô㥣ͷªÕ8ßÏ ò>ø=Ì)×1¤qÍxÚ÷:soäÉwåàZÇ[vk]Ù¦ò±gÆl~øìâá}ñk„Lvíª%ŸZ3!ã«-:èòÌi:ù»F’› m½(iM‰›í6 VãûkÄvô°{O}Nƒ…ì’ýšrùg Äó©Ò”uM’ê’éÑL‹D.wf;$Zi ìmf^ý$÷Šë>6î¼aÈ’õJ–Ú*ÛTä¾þƒ"„ꇑܗ'¼ñÂ2&m(öžÕ›ÉÉl’íô}åî•È Y2ùY­ÿ³R§}nÑÈh2Usó±mä '}ŠŽˆ˜Ý˜öì¶™ m{üñžÀ­Æ† ՔǹD¼£ƒšÛö÷ GòL=Y‘²îúßîž}\.ë±™¯{°gHC{aí×àyÔLñ‰ Ú4ù oWäÏÞäåê—Zrì/—ºÏŸ€˜¯µzk}‹€+äÂJqc¦•Ýæêåf×ßÅoËF¦V±Ý9Œ©¾2d6NœÝ4³ÜA0U²tÓß85p°T2¨V÷×Xù>ôé$R47JóU©dzqÉ‘YSýÉIÞ,4ÓÊx»5%£‡äWçºn£g¡qµ‹íe•#S9_ h· Ý™¹¥#LÆ—DÁ &yÿ3ïãÔvG'd.JZ€ðZäG?cÍŠJÉ‹µÃöšžNÂùÕëD1šé#Àb拺, ³#ªoWE%ë…¾] \Œ#ÅŽo’ øS'Õì>IM©‚JÖ.Û>׳cö¢!ZÕ Ú;ç¸éZ_Î1 Å×¹ ¥ÕÕ]§"§…? 1 "C![ÅŠ¥\Q´«Î¾Qˆ«-@ßë Á­Ê –ét‘¾îŸÏ4eo9$½»EÍÉvè¥w«Ø7þ{j? endstream endobj 1220 0 obj << /Length1 2193 /Length2 17108 /Length3 0 /Length 18421 /Filter /FlateDecode >> stream xÚŒ·P\Û¶.Œ»Bã»wwwk qww×ÁCpAƒw‡àîîn!ÀcïsîÉ>÷ÿ«Þ«®ê^ßðñÍ1檦"SVc1w0I:Ø»2²2±ðÄTy,,ìL,,lHTTê`W[п¤HTš g°ƒ=ß?ôbÎ ×7™¸‰ë›™‚ƒ=@ÖÍÀÊ`åâcåæca°±°ðþ¡ƒ3@ÜÄlP`È:؃\¨Ä½œÁ–V®oYþç4£°òòr3üí±9ƒÍLì &®V »·Œf&¶530ÈÕë¿Bù­\]ù˜™=<<˜Lì\˜œ-i`W+€*Èäì2üÕ.@ÑÄôwcLHTu+°Ë¿Äj®&Î À›Àl²wysp³79ÞrÔdäJŽ ûËÿË€ðoj¬L¬ÿ ÷oï¿íÿv613s°s4±÷Û[,À¶ €’¤<“«§+ÀÄÞü/C[‡7w°­‰é›Áß…›$ET&oýý»;3g°£« “ Øö¯™ÿ óF²„½¹˜ƒÈÞÕé¯úÄÁÎ ³7Ö½˜ÿ>V{{Ÿ=[€íÍ-þjÁÜÍ‘YÃìä’ÿ·Å›éÌä àdaaáæe€œ O3+æ¿‚«{9‚þV²þ%~«ßÏÇÑÁ`ñÖÈlzûAòq1q\Ý@~>ÿTü7Bbe˜ƒÍ\¦ K°=ÒŸèobÅ¿ðÛÉ;ƒ=z,oƒÇ `ùëóŸ'ƒ·Ù2w°·õúcþ÷á2kŠ+‹«(ÓÿÝðT¢¢žFv^#' €•… Àýöà÷ßQ”MÀÿ®‚富½…€÷_ž±ô?»ÿûôÿ^ ZÀÇRtx›XøgÀõY8YÌÞ¾XÿŸÇüo—ÿ¿éþ+ÊÿeÀÿw=’n¶¶k©ÿ?Z;°­×¿õoóêæú6û o`ÿ¿Mµ@ÿZW9ØÍîke\MÞv@ÄÞÒö?$‚]$Áž se°«™Õ¿Få_r¿ÌlRvpÿu¡YYXþ—îm«ÌlÞ. —·yü[z[šÿN)aoæ`þ×v±qrLœM¼ÞŽø q|XßÖÐäù÷˜™ì\ß\oíù,œ‘þ:O.N³È_¢!.³èÄ `ûƒxÌâ/€Yâ?ˆûÍOþzóSøƒÞ,•þƒxXÌÊ€Yõb0«ýAfõ?è-ƒæï[“?è­2Ó?è-ŸÙÇ[”·+Èîõ_,3›ÿ²˜Aÿo$2ÿëˆÿ¼iñ¾´°ÿÁiÿ@Nö¿ û?þ¥wpsþG¼7ËÀ·€Vê};+/G«·ûöÅ›ì YÞJ´þ|ãÂæð ÛÀ76ìþ@Ö·ÞÿDæ|sµ³èßÈpøSÌ›³Ã©ßšqü£~ æøöâ°·YüዃõßRçÿ¦ñíÉìôøÖö?Ha}ëÑåOa!û?Hà|3wy»ÿ8¼±ð'úÛµÂìjå úïoŹz8üÃá­Y·À7žÜÿßZõøÇ¡¾yÿ#Û[x¯À7¼ÿ4üÉäü¯TÿµœfnÎo<¸þ}y¾mîÿà¿ßƒ 'È iqÎÁìC¨umhëCµ‘ãî¸À4Õ®Ö'ZFŸEç6·_hð©´UÙÁëÎw"©CÝ+ÛÀ[á%ÒgŸãæzøˆ)*-O¾¿’T'w[~âöO‹Ôõ‘ 3ª ïù>;ùjÙ@7CvÈR}vrãASþ‚ýàÑ+åY×W¾<>·«²WÅ%‡ü»|Š1N#V?¨d†*ß4gŸΕ‘ëÂ}æön+oâ•T6‰Éï$޽ÈGwƒ-þqÖ{µBÍ¥“€’@Ÿúkt’ÚGô MoÞ§´h¥Á³™¿ˆ4•!}…ƒé€-« ¬cߨSã>ºØÎºó9JCÔ½“RSÖøÎÈ™\ §ªÅ(Ûµ†ÝDrÐn!ºÚz§ÙeaN¼Ä;U÷ ˜å&K©AÍò[ÕæëDaÏÏ+”õ8+Isžøè”tõ'¾EO+á6´9Õâ¿N†PØÅ¦¢?Fk¤µaÉ{Œ<^¦0'ö¤NF'WpC»}Tc{½qoY:AñÜór½‘3'Þµ ÓÍ™b:j(:½U·ûþEôÙvOú&û󈄆^¨®dpm™±Ê­ñÚ$Þʃ¥9ˆ@R&½ÈYƒ±_Öÿ•(ÆóÖò”#\Nû¬5Á§k1 ¢î>%35tûò¥~÷ò“’°ÂSy~ÖHþ]ÌVY|&‚7UÌ,¡œ¢ìïãÞ¯…S~sZ\M_z?ã‹ Ä)ap)Æf‘Gs·´®¤¸Í*"¨i _ѧ{^É༢ óÏiÞ ~â<´)ãó.T#ãÐ »Kn‰&fø0žÎ•d«ò¢(b­‰näh˜ørâGñÊi“­fÞü6ê¶qBÙ›dO«óË‚ÍkÛ/ïãB-C?L‡Y ³Ö|”±ãýEfü¤K¯‘‰£¦“­2âÂܬEœï8@a‘*<×d ñ0]îÍûó Òp:4’9«¾– œòMÁÌ2–­Îx¿'åBOÊÁ‡±\Á¢VÙ®Ö•Ñûί•j,Ô@ÙóÅÁÛŽlG¹rüøT\ äz<-Ýýee€|oçv«·k ·¹f´4ˆGñÀMW·A(]^ÕQåôªµÀêá[Ѱõ‡Ýc³påûXÁî7Ä'( ÓU‚0“zñÑr…çEÃÔKön–š¥«Ð.ytU…\úµ_Ž Cªr‰á®-žÖ3ÒZ?wÙ mà©ê{Ⱥ#N¨:ÞU_îýÃÏ6|Èù‘qèG¦€ÆêÚ-¾µ±ÍäütSÇ ‰EúÓw,˜•"fæÚ/9_³ä±-ŒänäNÏžãe™ mãâüκ½È—ì¾u’Q,•xšNÝ;r*ê½Ð©z¹¤¤<æ3e>­èdˆ Ëý‚Áö±(]\÷ÿÄýmšôñaS0›¶« ¸9Š‚ÿN¥1ªÓ‹¤YJt¢V ß"»ß6ªÓ²IàgÁ!Dìs]o@EѤG l‰ÏaÇñ ?Ò¨Àà—Ô6ub„nw*j®rre7A [”©bû,¿óÜü­íò‚#øy·#„kØü¯\tiCÃàܬD¡@ò8‘šžpÈøØö5¹,+£új­™§½±î VÙ8²‰#Ö%Áh­=ç+yóÑ)Ãöä n9Üöwfîñî^»fp·eí÷‚e£fX©Rkë O1IõŠÞ-òVVwâêôMñ^8inÅ;Áð>ÆAn’ãg P‡6ÈðÝL@îû^‰óNÁ¨ pv`•iüÁ\ù×Òì¬÷¿O‘¢†®Ka|‡Ðél‚DdtqAAD4„ÑTÑùŠA(xhsÜÄP3_1Q¯´œ±;XáÛ† }äùè«{ž‹®é¡{ÆÒÒn›ø4âGîài­®FøKV]—ü¡Š¬YQTr¿1²ûe¤®¨#½Ssc4À‡¡»À2öaøÔløÙ²ÿ™t½˜aɽ¾£'””Œ~fN× øxJ®m ùX¢3p­( îÕÌn,çÍN8ß<ò{©å6z¿Êl3xH´5{F ìFê01ãÝêvhúÆÄÐs‹Lûq”Ã7"=­6£lT{µ6c/O±?RÓ.ls.+i8fúÙÕåËÖ¾•l¦òQlÙœŸ×pÑà;ÎóJ"üÞϬßÔÙÑ+Ì×ûÂ6§Â&7•輩ØEgfkù‰ËÖXF‘êµJ!áÐñL§ñÛêͶ>à¡É-ÅW¯ MB~iZ ’™_É< 6õ# ½cªO·¾nƽá襳FŠôˆôrdà{6ÑQnßÏ ÐFŸˆòjƒ’Y'™bíÝ“är°æ(Ó&FÕüLßÝÏâ+>*”ßNšT´=ÍËío¡C=¬_«oB7¼ =b¹+³èK­µÚãúçŸ±Üæù×rÐìM­vJ5uZ Aás<ƒy¿Vh[9|mË$œàPž®õžÑeý¹¨}¶=~c ¬ò¨èQŒúÊÎ52cÚ%]ÙGÅ ¸g„vÆê‹ÕæR[¼Ì¤>´6°É ÆQn»¹JˆL³Ùw~)ÈìeM§¿àÍ€þºh,fˆ54¿µéDedTòŠ5dÏ&ÈS 6thìB*SÁ0\òä¾en2` ùÙšÅo:\èôíÃbî³møUO‡û©fdDôNÂs}é&*NÊþØ9§Õ»éi˜Ï”:KǧjARóP!µ'Bqì¢oÌ!²+± }žÙô}Ô›ÄåæêLùIV9ýñ6…Þ„(«½ÍôŸ‘ÆS‘Ðxá=93[¶}ƒÕš©5Ë^Ÿù›ß‹Až0—~yŸyTÑšpÒ ™ð´ZüÍÎcªD*„§‹ WU'åPšš×2*þ‹àã"ë(øýVUzŒPzh_Ý`1Qxwê…ίé`KÜÇÅ’5O-PÖQïÀûME•ZO*ߺ½Œ:¸ä>³ö ãHû{íc$x^W#YÖZê÷É4ºF‘fÕÄÇDrÚõRåˆï}YN;‰a˜ØÕÁÞ'0!;§°N~ÃiEŠ·{%/u/¹Ä2" ©{Tšxm1(ØI´qžÒØc‡X¡Ùßå± ]ô   ^ïƒïA}õY—“)·ìb”_e{å;µ+ Dá올ÿOñ4UÓ0ODcSû€ït‘Õ©uˆR˜Ç$颴µyï"ѸqÈ’ÕBŽfŠÇ_ÖP„ày¿E•XùìKÆÙðŠb"ɳ~»?®ôrªàK%Q²dÌW°WRA1(Éóøúož‘ÇžOœ5Ïô(Õ:X{[<¶ÄÖ-O?¶Àqø)¿!£S;ضâ³$ßÓt¢6Rèþ×lQt8 Xˆ ½±í_EC°ÎøàyûÒ[y“5ÜÍŽ¾K ·H&uíZÛ²`!k@D¸fóY¡;³Æñ0§™gëô ê°ŠXòk<ε:Ôxñ»Ùvnj€6dT°¡_…0Ý®sô·]NòàdBë¨á5ÁPoCHž£-üÚóë3Y;†‘9 /âl-7¾ ª~÷+…ŸDÔ9OYeÍ«à€S³tˆ›Ë·ùöݧ‰IÉ#¹ª{Š®@ûDA$tòr4”a$B%ôׯX"é1˜ž¦Cç¨7S™YJ@ÙøÕ¦›Z×!x©ÔÐ+3SFðõ1¤G½ïDƒA&Pˆ¢± ö˜b¬ââ‚{l9[|ÖŠ"›2­i³bhþD[`ù _8Ö,%–ô[Ø8r ‡“àN ÙÉ.w˜êJ-_¸ã{}൳”f Ìðw+ö±’*tÖT£Eüü¤ˆÙŽéЛA•(S÷$W¢ÈÉžÖ^JA¯3cÆ-ßýè ñÒiѯ/?Fß7Ž03wï¬îÃZNÚÍ=©õâI>*aHtÙsO÷­h¬ÇGk¤Y,®~™o•@Cÿéù\iWÔÒÓ¾4c”["^¨jrL<ÿ°nOÐ5N7+ðµU從ºÎöœ|2p°q[<ïzD2¶‚ß‹Ah]×öMp³ŠpŽ¢kôII¿tõlD7ř뚲…J¡Öœ+õ©Æ^z×^ã ’Ñfxêe¬­rRow¾èS£™”X&Bÿ¦Äâ§´‚™ø0Gj¨áYFë›Ñ·«ZìhH§#9’*Ýé‚FÈ‚DJ¼ßÞ'Àð‘’ÖûxÍ&ÔÔæ‚Ø](RV]›e]ÛÈR|M}µC¢}&eÌbõýïúO:éÈÄj¸gƼÙéKu….Pð1¨Ž¯fü}Ã¥ Bâ“A37Uw™»ˆ»¸™¯¢RB¸µ<äõ䥮S¼jø´ƒXS}¢;ž|&›GaU1âÔéFDü/@TîÛ×,Å4yšTÓF¬OêЛ߸x¡½%£›®z70.ô×iÄ<¡ýå[h§úÎ5÷`Ö>ÞÖ¿WbY%ªÎϼ‰š&è§ö•]  özd¾ŒzÝz+’³§„$åÓ›èœË“#êE•i´{pHuÏG¤Ç77sëªðo9 ÌùµÚ`Àõކ°áœ¿AVNOhžxŒÍ(£U+&77‚pÎKá¯ØåK¥¤&YWt‘hïTßÑ›t2x¤~ØÒ,±û\Ÿàßz-2ù2C{úà+³ã•]ИI$Œ‡ô%ñU„*.“ÅÞ„ÑÀÏ.Nd€^ŽF#@"w1S®ëG+ Þ¥ðº7ƒ‘¥>¶Ùt›;r x±\Ђ]%”Ð#U%Áó€Æú0C[ˆ÷K]Rg=h<¤‹ÅO>^=}m$þ$þž¤‡Ì–Ëzø¨*KÍ5U²;á-¼çiÝ&¦J4)ÒàN›¦Òм§G…X2ã7qlNC ¹ä‘²¸Ž÷DëuX­àÑ„nùyOÞcV ²u¨§¡²0ÂíüùÌ”öª¥ñ©´vÚ½i7ˆ:º ¦èÚJ×H©t·PS…"÷HöCoAù$;†ׂœvŠEÙð(âïŒRþš_Ÿ~¢+7™ÿìµÚà 'n N€wÑñd—„ud‰"J‘»‹py“=K!"^nš`ЉëCbžWê*q¾Fs%jÈNI~V#Ç›¾º~~ш~ê ±¥$cì—¯Œ!,»»U –Œâì¾#ƒF}·EéYЈ£/õãba9MÅmõÖ´š0Z²­ewÝ. ª+¥?Óû"zžÎ²?„hHVÿ<]ÿ^¶ÐÂeæÚ ¼îyßY§bwèGkg…Ø‚]ˆý£ ÜÀê¼± iŸ EJ›­’{…¹PßÑY7Þ~ìÁüÑç¨åº0é÷F N¤ û‡ ŽxË͆šŸ{»Qø9]]˧æ*.({­6‘$'aFjô!^1ÉÕÅa—‚> D¤âEï䨡û‰½±iÄÂO#’LɈËФ-täE&ýŸBöçðXN—™,2ãÙìoÍb¾Y®rV9Q„7Ýù†ÚU±p®ÁìN9ÈÞ8öJÇ^ŠÕ7:¸ù Ÿ’`¾(³úáÎ!‚ñ©ÕQmº¾]Øè‚ZG‡íÁÑ,×¢N:ÃÖ©ß-^tD—œã£OCo¯Àíø#לµŽj±p_»Äêj?;ñ!Cóòz‚Ìà T§}¼Åj #~y)ýP›cÚ£ßP§0þ-KWLWúMÉylž™•±¶Uʃ\RÛ´žíSŸ’$=?`›D9ÁñÝ€:­Ð$XóUé=DQM‹nòdþhÜ“pdäj»_NíŽsaüŸB1¯K9ÊKXÞ¤“p(xò/OFÓü2¦‚b— ½³øfáŸ%TÁ$ŃDrÜ1¤93G¿U­“²mØD²w©‰C kWT½',0£Óh,­EVSh<#LE•Íù«¶‹ §â¦ÉÐ{òÝgwíeÉ’jèø¿Õ0«ÕB vC (Œòúi“è-«²oþa£W 1?&ßr‡äB”¸MÖ;gBÏŸÖUT '"ÙîÞ'µÂlj-ð%źÛ䜊aâÊmþ™¤‡¡çhñš.ÅYƒÍ‰ÿ):{¦§CÚÔúñ±‚„Ñø7fljÔǤ˱$²¢Fß²[UMg.DsJLë¸û¯ß@„y?*ãNTLÆLwW¨®)HÆø—ƒ‘¹wõ ö¬»Vt{ïÉejÎF …ý£Ýλ5¥j¨—Åp|n%7:Å4O³èœŒWÍ‚™.Þ én'žj¶¡Â LöË/ãWWó³Y7_B˜‚Ô2áèñ„©ÑÛ¢“ô{' :sLµÖóɾ(®9.â˜ôœ±$[$´Ú&¬Ú·L#IˆÇ¡Ô;ˆ9ó]V_“`îΜ¨`Àì@$¼ÛÍÑúNËãó>ÉNLc¡ñC£Šë ÑvŽÞ·hÝõr,LëþÌz_hÒÁ=1~]ÐÄžÃÎî/ñ !ý^l'µV¥Uè|¤¹fÐâ·àIÔuªË SãÆÂ(í¾£"î0ÈõœúnO¡6²ÌEQ{¶ïÅPû˜g+ˆ¿³iî– ´v°Ù„û?äQŸãTµ_ÁçúWzé³ï1zÇQt“šÕ›S#T†²®ÌŠígìÕD-€düuxlÉÜìã*~Õ÷×V£õQ—°tdÊúšç~6l?îÏþ:¶j^|ž^™_ÅNí¡æ5Ý´÷q¥vPêˆÉ‚¦;‚X|ÈAI^sÈ¢ÄwüÅd2¦æ‹½<í㢦w+JííK=k꤬ÆY¬Tm>¿_§“üñ'Yõæ4åÊ–™2Ä9›ÄøhHaˆrÛ#;éÐ&½ç‡âýšÝR·S´ÒyúÔ‘ª_åÓ /çvWÿü^$÷©)´ÊL_~G=Óšž|4ößïMˆz¬[ìRîR¿ÅN4»)•9ÕeÕdkóo5øv.šÕÉȾçÉ¥& õbï>GUÙiÅÀåæY:Ü»¢7è—¿øù|Õ‹%×\å•R ®Îg‘+E§© …tÎh¶÷iC*Rzðµ%Èkd- ž`q„ÄÎKÆ#éÈ0o9ñÓ·Í9§¥’á½µÆnð²ÒØÂÜsÓ~mB¦õ¨^²ÛÌ'G(¯NA²Åáê×½­ª¦âM·AÛzÈ‹:9$LÄu8ÈÒŒ‡ v‘ëIbR9Ì£®5|¸EÐ{½àœ1µÊK\·«&»O]žó9^þQ ÝKRÒáA±Q;ì1}’¹µlò‘Ö9·éÜW¤„½»P§b!¡€Ô©×õD˜0E©4RWŸ¬Š7‹_S1*Tå79”鮸«~¬¨oééØV­ú^_Upo‰CsŸ‘”d¥5+Êð0â Ê×P[‰ £Û4)[«@Ô.fÆZW$2`sZo8E8§@‘Æ÷˜h5tdDZ"Ñ8À`(ÌF}ðî m±rzEF²7uõ¯öcÀ~VS®¢£Cð"þÀÇ™6Ï&íñéù_’pGÄ):êÖ3ŸÁÍÎb•½AB¡t†Mõü\$åz]lö0p¢†ëhŒAÓ8¥R£TQ³<ÃÄèuÇhæ·x!ÜÝð>9à s‹aS·€m S±g}l‚à;v‚ÌÔÀm„žüJ³•R.pdZ|ÜÏIî|>É…õí‹]Ñ‚_S)RƒxU½n8ÌìÕ0ïÙHËlÚ9Ý–Š ’ ÏïÖ(rÓ… yd,›¦€ëuÝ©* -ûãµUN^ìޤ’w@Gà;a:žŽs=Ü#ßc·¶ˆ“˜Dà+¦Ê¸3LÉ(·‚b+ ê6´¯±FÖŒäEDž]«¿ËÑðñ¬i¡røÖ›#¢Zú•qçÖ›i¸Ç°e[Åc7ìx‹8ü}¥,ßûfO¯SV#ú*Ž+ÅqtuùK/sr&l¸Õ] á –ÀénFéw!%Vô.¯ÝøÞ|E+ü(ìK“dÙÑÙGó'à‘.Df¥«Ÿ„Žª-ÜD}aÍõ ªOrZG:y,b¡#ú´,azPH+ù9ÄÊÓ;¢å}¢Ä^Z‰õ§°88©øžìZv\jfÝw“PáHê {š¶ˆ•7UÄýšr»jÇ;MÆö}z”@z~çeŠ<-ût˜šÅ&^óz;b¿RxÚ%÷”©óœíô<ÖùÄTÏŸ)Ôü?wÑ f ÊWµn*Å1ᙯ }ÒD¿Ïý†ý|OüÑÀŸÉ:oÚ["À|:ƒ-49é·”WÔQÁ±¡%w §Ô«ó»áÇÝ2{>¹¸ŒIn8,øðu?Hî5çULK`ºkVÀªø¦v”õ]®¡<ר¹nîA¼¿K熪4³p^h,µäÉBƧ&±ÇdÅÓ˜åçÑ,FÓª쇤QY“ok+¡YƒëNZÉÉ»Žy}ö–y‹¯#æi¾aåÐf˜"òB×ꀯº˜yäÁÕÏd?ë œ}¬ñ™ZBõ’qªÃn¶~ mÚ{ À"¯ èa%—åÍOêÁû#l"&d.w_SNîõ>ïn¾>ï¸ZÊÀ Þ}ȳ.R|æ¹#‘Ä mö85Hàn&WÑÖžK/”¿ê (!Oß|ÎD{Iq׈<çáb`¼ÕïOûô%€/;ÿcÅâ î+¦5ð¹´UïÅB…`7Äÿå±J µŸE9Ú«÷ã e©÷f |ð –ÏÃ/FÂè^­|ˆœ€7»¹[^¢›MÊ¥#Jö)Šß×¥$ì&³á*6ÒÔ$$輄Ý{Ÿ Zó9žíÔÛÛÊ‹2Àî0ɶï–ê„ë›n~€›ëBs0žÂ7¾]ˆS¼Àb“éÕ—DVu.[e\Eq¡þ–%‡e ^Éh»¿x¢¸%rKMœµ  ¾WjøáýäãÉŸe¬öuÔú$Ù÷¬ ©Gv §õ‹íñ”{ëöÅ“cíð9¶‰>ÂInïöÓšIõå|P9¾@œÅ« šŽ7ÎèÒ`:­F™µ~¬@Ûý6t«ò£Q¹À§áÄÑb8“úä〟×i>Ú¨¬˜Z%ªAÒ!‹ºCÕW¬k¨]¢œÚ£ã&†.7FA%)ÌÌ+Rp¿Tt’“*!2¯.I4øv‹suùÛ¶ÃFvŽEpaz÷å o]Qî™9+u-úàq¦„V rû“±á£äðœ¡rkÙ¥æ³G„ˆ?éŪ þÏO©ÚójcôË^lêv£ÌÔlF »+/#þs3#‚t(¨:íä„r˜ß–&{“ÚÊê'„ ”ÍLûí^έ¹Ùœ—Aè¾°ì÷¡²¦É×¶Ùj¥•£'ïð¬Ä"d ¬&p^öÕÐ;—ЍÈ$‰O!ƃÔE |Èãs fŒ‹Qèžv‡¥íPwD¤¾eîéiUÅë÷ýŒSV5žO-?î5Ñ»O:r*X-Î^ݬ2K8ßã‹fñVJ Ø /?GSâkBëð­`쥎_R‰K´wEeÎ }˜¢FBiùÜÏ4©ê¤’›â9å6 %©0ñ Éè íªS±<× ™0ýô‹"[G$÷òd'M„Ðî,wΚ’¼ÌmJŸõãoK"PÔ¨·@š—ÂÁ\‚åG[´SDcøÙG^‹Æ%lÔ†Çhð â‰>½Ã‹–´õK 1  8í…ÃæÓk_”Ê;ŒC˜Àîž±7˜ÓCtJS?5Ýäg@¯™6ß»bäK˜=lp{ÿ¡-)s‹“w°XÏsßDèË:0ñP_KÓg?-Aó[µ(&É¢'ÚPwZW,ct¢Ž[ÑT‡ýÒl&a¯Æp^š„š2õqv_C­ÔËe‹¼*_½æ‹_‰d ¦(j;ô… ÌÍøé·ÊùXòÄ9tì¿pD~×rI$nû[ öP¡Ôï×zÇZQ—t.µé>*tPÒ!cnr›Ÿ\¶-BHµ¦(Šéz´hÙîÏ7IˆmýO ðŸ¨[So°Ù&~Zß«R±³$i<¥3ɶÀ³¥ Œ;b4?F XŽ)ÀIü€ºD´ÓÃeÀ¹.k¡^<C%ñA»í³¦LÒIÒð”kªŽ@û«¹Œtr¯¡Ô”Ù3H Æ›IÛnš‘¼Œ¦¯}¿|úQ'…¸]Ù ú„:PªpöÉH²/§ÿ$Y1œÚ¾¥)é¬@7‘&W«:¼³¶4\®ÃÃ¥s«½“V×aNhøÌR$™L› Á6åtykëòˆ!xœýÁ—dsC'Ð:ê|ÒÖ„C§!IùÖ¾L°ýKgõ’ªh’VÞ’Ìx"b:gºdIÌ”ÕQj`ŸpâQm8—Š÷ɯ,¾‡u̲æšA_VÓ£·kÙWe—{T¸†B gðWâ…¹ d°ïòzD 9×…×¹è;nb ‘óM6"·@¢e¨:<™“0uÏ¥Îá“ð8¢>¯àÜÕy†Ï¡ä»|¿úÒCSS#4gѹL¬óü#¥¿ï²(ñŽÁ>òªUÞØõÎJ):¤ö}½T =êF•`Ë›Ã6”(Ѽ%ùìÛïHù³u«e'|ëdÌÀ#–1E{kÏVŠ6½Qc©:Ž‚ÃMaá[ÎvqæHŒ¤’:¢¢ÜP4â-Ìh1Ñ…W\_alŠ1ÐpDgíÅ2*…[>µIëYD|oÿ¨§A$‹›†¼ «ê†G(O–Ö¾ýÌS{ѯžÝz±m±CjóÎóÒ±»r¥$;(Wk|¨Éq^åS¦_Rø>kÅWo6i1 ‡é͑ƚ¸ÝÐü¤éhX›Gžg\q8”r²ï4Å0PùqÐjzl~J7ýuBëøã¾Ù߈͈¾¡Ð,ÿb´”‘½œ³ò2ZÃØåìè}Á ¶È}(p7 º§MaJ!ÖÖð/,}D¯8ÙŠ¤†÷Kƒ5Â;E UÐU¤¯ *-[`|û«žåFj$æŸ]øøÂˆg_¾ŒQ«G÷ºÂÄâš’"Ûö|ƒc£š¬˜]ÓÞ)´hÇ_€ÚáCÔ=ñ“îq(ƒwÍýáíLE*F%ÕÁD{%òLE@TqA`ktX·•'¾ u‘á;0–ƒ"'Ä3àÒþþÉg" „/¹÷ÉìwAûQuX3Ma¥f7;~sÃ)©m¯ pÆÎi[Io›·Ž€ôƒ37KY7Æ-¼àFáAž(8?àiFy#j•Âu—p·7’ƒæ ñ¡âIFt­BY¡È$(ýÅŠñVv±J¹ Ùµ/P(oî&Þd½—›¯¾8ÕJ­çuƒU¢þÊ›ßHÄàªWÈN*$»-»tnig‚›œN¤ró*‚ÿë´[À‡‰rÞZðËRK•|U7²–‹TâðH¬ãÍòqM“*LkErˆJSFyÄG›OùÇ4‰jO§Iä]H½Ÿió¢_¡;w%—…“5ˆK bÅPj(ráy-c;ë¥Æ-‚cfÈ_mÎ²Ê ˜á‘Pk`=,VR"¹=N€œètÕFçЄÉG*ž[D¬KÒ#­‘ \²T]¹¹ýñ’}žÒN8‹Ëp­CsYJTúp+Ûæ­<MËXÇßí݆"oÔk·G@(¬œ¼kh¹¥?ø<VpIËàR'!˜åò·’ðçûês[]û~… £¿¸ß$L(¦7Á ÖSÍ#"ß$¦;>ºÚm×¾jê€YªÍùÔ}’B ¯9E÷´¼Ž¨`åØd“”"˜\oe uH&¯UÀ#Ô0Û%U¨ÐHºQ=ÈûaŸÎtñBIlôr'ÍîÀ ýdHM¦è¡—¼ûÓ¡ëÖ?$öTšÇD¨A<`´ècUÌŒ¦îc¯ß äó êÖ<²?Z{zÌ›\Ñ®Úî,ßÖžn2¾¥j®ëñLꛉ~w­iœ•2Í}›XÑŽLõtï1—ÜY®¼âêùpAß­ìN©Í¼ú<4Eß±!Û½ÆÙ9Sí’Nk(£¾·‘ÎÌÝR¤}p¸™;ý-&E~ã,ª,ÿ‹ùq–ëù>«Ù‰ü¥Ÿ÷<Ø7¶üpdŒ†yX_÷Pù´ÊˆäË‹ß`NqAø;‹b©¾w”äñSEcý»Ï PûœUc Úò„XœjKJ)(•7.Ü…Š’½¿ÜÇÍ VŠî{TUøðÂòR6 † §,½ƒê(0Ë-~ ¯—ÿ2©u?[FP˜¾·¡*ã´9–Ìûa;ð>äÉÊþ3­Téð‚ÁnÆvg{;ƺž[ëÊñaÖl3«<–+TSÊ5vÿðòoùÚ‡…µý“‰~çRc-F8òú‘!¾‚ÝÒ}Ö¸ Jú¼Ñ‚útjÖ^Ŧ\C%Î9úÍI N‰eUË£pMS}JömCl•¤‡ i|kú« +ÎvÂ\ç°ê®jK¡Š §Ô%FÃG;ÚEn qA•$®ºlÞ´š1GŒI@•{’‚¯ñȽãöÂéœÜþ‚“lL×C›\£â ê)¶ZW…øuC'±X,ǯ„d™ôI-N¾¶wƒÏÄ7©Ÿ qkˆÓÇù¾Hß}¯ÈJ8wãä€Ô‘½o¥)<\­»lk < €ÓóšÑ1áÃAs@ÔîâªûÁ•‰t* ”õ]&î ©(Oÿ9ëb$~ì…$/»™÷,z »Õæ®ãÒŸ~Ì‘CøátHºjIð¸yy½ ÄÐTBxÿʬ¼¢ NÉ~17“'ÆóæÇ "leJaù–É]¾¼ûFKÚ›*røÈ{c±ëO±ÐN£+.Ë–úoۛŅòãMÌñpv¾¿ò&•¼¤3œ>ºÙ©[æ‹ÉÝôªîIöà g¥–ÛTÝøN7(#E ô€­ø‰› N…4ÙMRøo¯GÖœ¸~ï•«ànm–‹õÖq ߦý䂈€Ï_.$ `µ:àoü©hˆ£K5żý‚×.Á)!>P°è³¸ÊÏ7Å–¼…‰„ò­W–„ÊŒØ^1ÈhÒülÓñéב&m`×½™§4·>†P‡F³ öøJ±X<ö£ Èæ•MšLýe8™¶ñ÷ço¹†*’ÂuþíàA7ªßÅ¡±ƒ[”»°,zÏSEŽ@S$ChÓŒfG ÇÈÃøÒç*–9‰} ç›ç³å˜TL=¾G?ÛÕĘ́cEl{m©4y*"ŸŠ‘¦¬ÅÜÑ×ÛE…Ö`Ic¨Ë·šcÛÏóÈIéúÍA-ÕÚç1ô]ÎÕA·1°½»ÀðiïÕa^¤aAáWòT„¡¸SÚx¯Ù­c݈¦›S­=_D2by¯±$bm©Ñ̳“Ábòõ2)R3K{z·‚Gì¶pR´G9¡’ö;…}0ü7±ËãrXXjoÌÊÙò²²qæ$CßÛ2kuG­ï{ë Å“D}}—5×4ë-iªm~6þByY‡u)ˆõóVEwRš‡ÀÛöjdWÈÖÇo2¨ºx?±5¨Î‘LQ†ý®Uè V¯ìr{šòñESç´bh‚9;¤¥ð °×œÏØ  `ç yS OØJÓozQ±38ZøD÷D u³Ür~TF9]H9áòÕö©e[¶M,c ¤k¸ mô”ê/ŽÈ­½žú‰Ù*éÒ$òcAIVçìitx*W‘øAÇ-D`–xv\Kèѱã¸Îš6íë+Äše.ßÊŠõ‘5¯ÃjEQÍÏê á^}x.èÝ“¾ïÍýõ3¯å"¯ó%ZFæp}E…ÙñûãÂ(#A#zkáõ¿¹ŒT<yjŽõ1Ćä.,hWÊ{¤ë hY;G*2gz´PÊ¢b*ièÁ£-~/ïÃQóÂ-cùIY´ {kAL9˜E­”m,O2Ü™v‘~˜@xS#Ì%ž6¨s¼I: 3?ÁDuÛȽ¡Èq{éºÅN1*FDk» šGÒm®T›­C¤oPqój­7ëBæ,î싌é‘»i§¨|_am|-:‹Ó’HûéËé+&nòíÖ4PVköGgSîY󖮣 …ôŠŽë Òñ5Q‡)¾ÔDš·=틦‰ÒÛ‘ê›ÿkŽZG1V(¿ý¥déaåwû‘6Úà8ÆAjql)ö÷ís‹|ŽLŽÓnNJTŠ w½Öv\ÔB— ¸Q â“M &(ƒH%Y.ãì~?½¾Ãf6Óºïó^¬Ç;[ãÌ#W¤ƒˆOùÛiIÕ"ß ¼¡öh:]‹Ž kF· \\C¸R¶Ö}fŠýô–È\]\Om,tqm¿Ï[€{¿0R÷M¸(§Õþ2yŸê¾h½§)éìFÿn éàH»;w88mìñž÷Q0xu™¾-y¢OIÓ¯æ'Pø]´0LBv¯w[zÆ ‘$Q¤t‹$`'Š3ü¢chÈŸI6\GÅvÛùÄ _Jdì«ÓAZ¥ô+Bìb7óL çÚŒ«>KrðRêŒøXm‰ÁQ™M€üXÐ,ÅTÔ£G‹þ‹âåAŠ55ìàôDG"ŸÔÕ¦î;˜I¨÷{Ÿ§)>Ø´,Ô{ßúyˆò³/Š+FÔ¸ÚpVŽ*˜Ìˆ×ŽÎZ*Þ’þÒ-ŒæÒ›á£`+DÍD±)ÏæjŒÃ#r<¡Ïtú²!S—êìŽþ –ú.ºñB •ÏS¦K½Ót®m“[,4#['z½ûb¡Œç¾‡iéÓ7—Ouq˜?¶Ä\1Üìn€öÉwØö:&·îNÌ)6RÁ±(hÑÅ1‘Ù I.ƒ“½¤´Šyc¥KàÁWŠ –íäË Ã÷%«Ëïl{,2‹K~óƒŽÚ=Á,0ÓÀûM?}r(¢aѕѲÚô‘ý§Ö¡¡‹U÷!ð€ýV'q¥±uøfÊ=Ú*Ýst8.iˆˆ)°éüƒÒЇ¶UÕõ„CEóÑ.ÄÔV 2°)§÷Æá1D-ÜÝîèe –P ˆx&©j¨IcßZìÝÙZˆÛí¤ïûùœzVMk¢ZßÜbíü»[Lܼ›ÇþO§gNláïă2Q¤ Ò=ýô;(6·*§Yæ2OceÍËŸï ‰Â‘þ¬Ì‰eÄ;`ùšßgõ廫Ù/Oï ÉÅ9 1æÚ\ÐÖTsTöLÜQ&õAéH½¶Ôvó ¥™ÐápnÀ®w—LMÿSõˆ±,!»Õo¾Y8õA»• $£Ñˉ÷»]Wíè4Cµâ)ÎÓ†7Ýè†Rc5p¶²¬JíwÓhzc$(#°½QµC´‰õƒ}G›ðý‘¿¨á}¾,=t š´¾»OV\Ž™]‹*÷ìÑ\)L¾HRŒz:¯_gËï%'ëG»K3}ˆDs„ "5fÌ„™¯å=>DFGÖ,c¶Ð,mžˆ,m"°“`ñ7 Õ™“戽ïèž´‘Òcô%+ÄõrÓŸÃ 8ºu_d“Ñ`ª°Z«å¥ ršÎqé{ ‡a8¨Òª& Êñ ’×\]†­à¦q¤ïÃ_½ª–gG//ÖÕTS=KbÛf»Ÿ;^šAtÒ#!Ë”`:À6‘޽yt¬¼A3‰ž”"ô Í÷ÅîµZÂK,‘’–}ŒâÊù¡»…ÏÃÚç%jUÛ[ï8õ-Ï]OÌCwZÁD³ïÒ6œÒLÇž+¤Œ…®çb¡Òê¡cß`£ž‹AOñ+ì­™Â5ò«ÂõjlnÄ÷b½¯˜£7ÖcÅ¥G¸ lã|Ñè‹ÚØ6;D¢Tçh>×B\¸¨ì¨Í b]ÜW‘Z*ñÆVC…mYþ§Ý ¡)ö{¯šìDL‚äãèæ{B6ƒº;yJ)*ôb[pÚ‚B°lX“n%jkÒÔóSŸ]Uj?=Ÿ}õœst&x„¡9"޳¨FS'.yÆIëÈØmãÿ{l¼yò‚V¦ZŸ™5Âꃛþê5£¨cïhZDRI¾çšþÇR£4Uðïn‘´CµkR=êVZ¢*×{³/@ñOdå[¶VŽˆÏ'TÌM—Ô< ž…’%’Cƒ ¾ëÆÒ‹‡"ùS.?ÿæ+µEYãÐó( ²pX€¢~¦¯^±¶B!›5J%5.¯æ.õaÒ÷„unÍ#¿{e(ÑæÈF`kÖ"¬ßf¼Ý5Ÿõ¦û8jñ©m£xáŽüš\!–s²’93©±H’'É9¼ ™ß­ª"ÊÁ´Z—ÿ¡‡háüÊ!È9¼î ë ÑñÁÏ•²KW{ÑM6y6¹6g6›5-í"õËüýË.ç…ËIÛZr“UŽ»m4ßpÓ¬Ô£J~x<Ññ¦WýŽI3‰›ô,ßHIû>lEf^Pñ€‚«ç¸`#Ó&èÒ¨”· Mã_sðvûà—ƸãdbOPÂØø+ÀJë÷®aÎ)¶(úLÛB5›v¦fÝ#ò¶Ì©Ç:G¸n Y‹FÛVcx¼ÔN½ŸªwÌTz_iw9·+|<´'"ÝzhS$R$¬OH"\MCP~˜wsz®Œ¶#OÍʺÔįH0¡×ôæ¶I,|Ö⇈’cû^¼=»}G«­ùÖ½Eâ½]£&ÛÞ2„u@Ï>„§uDA&ðއ6¶±ÏªÃàý™á·+­b9´ÙIé7 ÜY_$Dâ¼™5·‰*æ~Ê:aQÈ8äŽA#:·XmNAœZ%D¢ï3¤¢ ià¶À„ß~|@CúPý]Þ7ÏDÓ§ÚšœC³{wœ[œBd‚Jª5©w8«%<‰¬ÂÄ`f[yhaýK|ÍðÕœ¤ô-ÃÙ3Ö%‡E(Çf.Õÿ76ÂYCò”€6ÈT­H{©k¹rúzÊ‚UÔU¡Å*j^D+nŸ¾YgØ“4(->D½TÞ»øJµF§ Ã~“Y+É®1'êyèŒ@ `)@ÞŸÒœ(3;‹•Bİâs±Á$H0‡4Îÿ„ykZÔò'H¹*ëcOÇ7-\Ø•VûoÂÇò–€äf"7V-æ±L~KÈ©aÂÙ¢Ñë+1ps rTQ™’þLoT,cûИÂÁEIéæ )€I§CÑOΟOƒ`ÈÒË a9?]ÉEÌYeªÏ^¡28Ù±[G .Æœš!ý@ÙµM¿h?áÿ¬GAe©È)=g{‡*ùòÈ+ö˜êâJÇ59Fö=DÐî3Ãé«C*PÔ¸æ;¶üUX–JeÁwÒí–TY $ŒÒÜèèúõd̨ü€EGÈ‘Ghá7Êìûó‹0KWó¤ø¸I*…‚`q ’"e.¦G¥Wš½Éo“ôxÃ1ôÙß·ræÇÁÓ´YмÑ=çýØšùÖK%€†·’eöB¶w”ž»"¸˜j®ÔQÈ)9–+÷PÑ……¦ø³á€¯¢Â½o~yØÃ–nK¼´‰‡”zXЩ²¶ ˆ¦Q~ÆÑBfyæ¨úeé¸/å2a”}Ï”òV5ÉtÎå{Ú¸¾ï} endstream endobj 1222 0 obj << /Length1 2304 /Length2 18682 /Length3 0 /Length 20027 /Filter /FlateDecode >> stream xÚŒ÷P\ÝÒ€ ãî 0@pww îÁ%Èàî‚;ÁÝÝÝÝ‚www¿¼rNr¾ÿ¯º·¨‚yÚ{íîµR"y%ZACk} ˜µ•-#@XFIš‘ÀÀÀLÇÀÀGJªlê`üŽThgojmÅõ‡…°PÏá]&¢çðn(cmt´02ٸٹL œÿ1´¶ãˆè9™dè’ÖV@{8RakW;Sc‡÷<ÿù 0 0rr²Óüí´Ú™èYdôL€–ï ô,JÖ¦@×ÿ AÁcâà`ÃEOïììL§giOgmgÌGIp6u0(ívN@CÀ_-dõ,ÿ¶FG P61µÿG¡dmäà¬g¼ ,L €Vöï.ŽV†@;À{v€’„4@Îhõ±ô?4€ÀHÇøßpÿzÿÈÔêog=kK=+WS+c€‘© '&Mçàâ@г2üËPÏÂÞúÝ_ÏIÏÔBOÿÝàïÒõb‚ ½÷ÿíÏÞÀÎÔÆÁžÎÞÔâ¯éÿ ó~Ì¢V†ÂÖ––@+{¸¿ê1µ¼Ÿ»+ý¿×ÜÊÚÙÊý?ddjehôW†Ž6ô_¬Lm"ÿÚ¼‹à~ËŒVvNÐt10¡ÿ+²« ðo%ã_â÷<Ým¬mFïm=M€ïàÜíõœ€;G §ûŸŠÿ%8FF€¡©@hlj÷;ú»hô¿?;S€&Ãûø1þúùï'í÷ 3´¶²pýmþ÷#¦W””ÐP§þ·åÿ*…„¬]î´lLZ&V##3€ýýƒçÿÆ‘×3ý·Ž?|%¬Œ¬œÿ”û~Nÿ)Ùéß øwA(ÿKÖú}rŠßƒ®ÅÀÊ`ðþ‹ñÿó¸ÿíòÿoÊÿŠòÿ:èÿ·"1G ‹¿õÿüÿèõ,M-\ÿµxŸ\G‡÷-±~ß«ÿkª ügue€†¦Ž–ÿW+á ÷¾ ‚VÆïMËIÇÂöØÔ^ÌÔh(oê``òÏÐü#ÿò׺Y˜Zå­íMÿº`´Œ ÿG÷¾cæï—ˆýûdþ­¾¯Ðÿ¦µ2°6ükטXÙzvvz®pïúXîŒïKitù{–ôtVÖï.€÷=FÖvp=W6V½à_¢ˆ @/ô›Øô¿‰@/ò›8ô¢ÿ%v½ØobÐþMÌz‰ßÄ —üMïÙ¥~Ó{véßôž]æ7½g—ýMïÙåþKïÙåÓ{v…ßÄô¾¿é½¥ßô^‹òoz¯åËoz¯Eå7½gWû/q¾çÓøMïuêý¦wKýßô^§Á‰õ]g`mñþ¨ÿ#aaùKbiùÛÿ¯ 7üß»þïíýÆw¥Ñø—Òô7¾7kdñ‡ï;ÿï¹M~WòÞ½‰« Ðê‹wÙáÞÄì|ïÛü|oîÏdï[þQè{WDþ«pëß¹ßmß_•¨ß±ù­~÷µy[YY~Kÿ•þsÍüWü^¤ÍûåbýÇþu¶à{ãvà{—ö¿ýß»²·Ð³7ùÃà=äïc‰ðw¹ï«Iïàlý‡Ã{ Ç?ðýdœþÀ÷nÿxfïÞ.à{x×ßÕ¼»ºíþ‰ý?{oàh÷Þ»Ãß÷óû¥ðþû… º àf­ ¸ý̪ýZï+?8ÓîŒ3± ö_†\èn‹â:í)øó<\1ç„Î vþÚ }XG;b*|k0WÃb0×YóH åÂZ¨m…4Òߢñ˜@ã}<²—vdÚ•êèÐøÊlehŒuÖ¨8è|-0M‰Mc{±3“z𙇬±ü®Ìä š¼þ˜l<<‡ƒƒ̯M0µ­\¨JpúW»Ä'ûKñ“|±ƒ‡¤¾&ÖÍþÅbPÓ¤‡‡ˆ6Rש‡|‰ûÝlxR_'Ó¤ÛÝ¢8O‘>×­~Þúö£Jü$ÜiÛ—â—§ijµ(o“?¤iPàk9Éu¬f[Ôä¤0:™·eú¢dÌCÏî0ÄYš,¿Î@ÀÈÝ~QoXá2;ºrÐn÷`‚?kîåÇÖøâ[ÁH®êS?µT*?>5.(SVhšB?KŽè_À8ŸªÎS6T¤uÔd5`Y~ë h«úÄqޝ«ÿÖe,‡ ã…hZ—‹˜T [€ˆÊ öÉ L¬ÿÚˆRÜŸ¨kÄNY837àZ_£Ý@»–aŒœÔ*ªm&„"rADëíÿÖâ£Û0i7ëhmkAß/ØkZ­_Ù š½¾d¦øÖ|X¸ÕT¥ÖâªuVwüÖ}‹«Ø`ìáxºL9R°5r¥òËø(˜e´ã‹,Ôš%wWÜÎ!³'Í’¬(ãÝlÁ|ªP¢ïÅ"0ÕlƒÈêÍn“gèÍÅ¢dnQg?•îéÅÅób'8u†G)A4rÿ£\ Ì¼:9Ån {b5€¨!½í™lù†æñ³a¶Œ¨ÑgO徚}"è}æ ™áå¥U„=eÉKF§÷²½>*è+~üp®i·•“²7‚Ã÷ ×>¬i±°g-;þ”Ô ¯î‚ËUòÏØ¦æ e7MiÊøúé„ýˆE“ýö"Y€E°¾¿Ëil„sX`äéq¥ð¾šþמ¢APóø{°µLçoË|Í+8Ÿ~:SP˜Ê*„:D‰X€¼µ¢AI¶ãm{§ï(¾Y~ÃIsÃp†¨xÓYHÖ\Üm-’Ä ”Å¤ÝæezfÑÁiSweÓO—•ì€SÒa{QÊäÈôÇú¡Z2çÏgo«ZLs4Éq•î‹rfr;Ç?€Ö+ªýÃYöŬ߾^S¸ bæÍþn;Ϫ\Ø0ÚŨ¦|ÂH$?? †bÚštøál8¨Œˆ#8 µŽpE#iΔ:ÉnF9mÞp&n I,íT<÷(¨PléÔª>G[$úWx—ž‚øAëæ( Â*ë+…(ñaPawCÇÖ¯0ß:C–<à¢_~ ú‰u—Dàipòn|fN1A‡Ëüª/ÕÔ\ÏÏuÂïFÜt\ªë>R)í¯5BIg)ÜEðÅ“+¸Mlì{›¿¦6ýAŽ0¬!LzÕ31kìÒtð «§q¿EζÀ¶£¢)Ft(ÒäŠLÉ_¶‡Ó·qÒ‡ŸìüÛN©£ŽðsZ>N× _”£w=—|Ùñ(Ø|}ƒ qÐ¥ª;ë¨JçG>{™QàüÚ›„thVöÔ®m­QfE‹©se¯ÓØr©ÌçüÐDê©Ð‡jÏ&å\•ðd¯&‚ûû.ó9LÐ…Âê Ú¢9Q¹f¶ l_±¬þ;ºÊÝÅÅ‹%c„zÄW Â+J6¬î+݇©Ÿ*í/´ä“^Õ1nœæ,ÉO“ZO“¸ÌêÙ'%ðDˆ’༪H/ö{Ö°v¸!®«KT‘­:Ä&Ø|çudçà'+‚“_§¸âvNYœRM.Êi¿¦ÎÑNžº©žè–kjcÈ›L4,ó¼«Â+ 'Ô«Ž5Ï ÷q.Å#h¦µ>cDZ,Õ¯"7¸{ˆ;uv‰T;¿¥™¾èsçš+žœ2ŠvÚ|Lí@ñ)¥ÎQ,B-9’å§ŠVóW/ÜÛ ½É|Õ1¤šüù ëÕ /ÕáƒX[ÛÆîQ‚,í2ñž±T8Jkc)¯Oô#I¹ÄÃ*®-Ï!0WÖg‘ÜùÕÆö)b‹³Åôâ® ÙLHGJÁ^cPªîÆÂö&X"(Ƈyžf¹Z›Ÿ‘_Âg’ƒõ· ìç(_—R⡹=à$Î-”èD"-»c`—µcÇÜûDJpµ¨Ãƒ˜mRsûÏÃR,`Zv)#I0‚ Ú!<º\ŽçGá­WʩƚÖ(úpha9TRòÜÒÕ©RÓsi;TÕƒ òݹ 3ùN8;ô—òðÚˆx-ÊÃ\ P6Ž7gãm¶QÇ­n÷\äç.¶ì‚Ä]k^ J1dÂîÍæehG¡÷¾”75á@Œ0ÙN"Ò\Ú¡À^Ùzh%þã¥N|V̓]œj®~8A€zc1¼£«oßËeÎŽg¯¬–Ÿ*¦i L eƒIÉC£4#åDŸˆ±¼¢vìaÎ> fœ"²~¯Š#9Ï¢g®%3@­ò]áúŽ;qi‹RÄ¥RFæZòbçøìE²ACýY·Býv†!p"=e®I%åà‡¢ÙOÀƒ36gr-1ˆtή(y Ö.ƒ;L b5Ài05‹Q¾ƒÛÔ «ÞKõõxõgGc§ûÁ N„Š“é™&Ò¦$NUìý"X'Ç·éÇr~lÔf­ÕóDs"EÃ/ñc÷ߪ'7>F¨÷{íøBÊg¬(Fó ɪZ[Ó/U ;—ϧ“™j×=ä{¬®úá»±šË©!L6'Ô,œLYÛ<íYƒ†ˆÂ5›=Þ%†:&‰qÝX†üläKnYà‰—ïÿ-a?ëÌùrULTø$wÚ®é<ûáÖ,ûa3}Èép-ÖÝÿà¯ò\#¿à5ìt•»î‰[‚ÛÁÑ+ÏÅìŽX—çu¾:ˆ.q QhÝ p(N@uÙdvŒ.žcÛc½,„¥f Ô-¸M=¾Ð+"`þJL}P£¦u(61jG¿j¥þý]í.=lIÖº¯‰ÓË®GAÁÄ<ºêÌeÐÞƒ¨}w u³ G ìP5½0§·5w ð`œÉñKOU FÔŠâ ψaU<Ñ:©k•'½Söõ~‘ÍÙH™¸ÿ£º¤ÛQì8qÿ÷3=›à‚c"Ÿ®!Hô!«B\…‡ÇÂ/œ(Çú=¦èÖÓËä™"=/µEo(šï§]—/ïžÔ¸*œSÓ"Gy»³Ï ±ÎæÎr*¬wTÓÈå>1^ ,Y  4"~bÖ°Ív 1×ýÚƒ)^æ nó¾ëBR_9öгb0%ãÅSy§õǰL§ RN?ìÏS ¢Si¸ÏX–s‡,EþFY· ù#Z°Qµ7¡^¨Â1¡l™ ¤DlŠÝöq½P·œ°·{³ R`#ÞíÞ•àm¬(ÝM¢À¯ÅtT„YýåqqÄQñ=P1餈âon£FzIÙŽW=¿ÒÆ1Ç\®ûñŠÛϿّ’?ÚîRê´nŠJ÷îO^Ç£=òúŽ!|&lfuè6·Ãl6TÖÓMýâ™FÏ6¢¿$ç/0o‘ö3$ª3éîÍëŒÚݵ˜NNϵ¢Ãål¢ wÎJgb½ y^>HîŽíyçí(q|›L@zÍ÷|¸šº‹SÎÑ%/'ÀŒnËóªÜÝÚ|1}ãê˜Ûià© š7©Äʧ ;ò%e8Õ¡6i*ÿ{å*ŒMuÎøXÞ,Èí¥¸(ëíö: ‘úi?³¦½Ü‚I$ô§qq7zn ®-5—8zÑrìâ­ouôVL“A™=üªå?ò~˜éWÛš M‚19ÏÁ59Ôû=Gúe#D‡¼œûŒÄbŽpóziOž}èY¶PKeTÌôèJ':ªkô3ôK“>}¡M}Ô¾œ…È‘¦ªÜ:9‘ Á>€âº[æ½ ¯X¶H<* jÀ@ËQ /ZåGWãqqÎ_ºõÀ¾ÙÍ1N '°xØc^DÕI@oüLH³0E€ôÁ§Ö˜äΆ,¶  ¶ÞõŒ·|K¸Žeö±®Êñ‚N°+Ád3_uñ{«Xj[wuÓ—9ŸsÅÜBø9Ò“zmÅŠ”&¡ô‚â§’Pˆå‚¡W!¸H9emBeL³dÙ9lƒA˜†¹©MíbªÝBó@K¼ •W¯Í—A`ÙjXΔ…ðM‚¨|Ö¾»Ÿm¼j '¹{´u/fF*Â#O›QB ªKÏ„*—žzÚ“ÍýÙa5Q`Ö<ðõÖèL~@kêá(ºüJÈÃÛmö”Ì^sØ^ÁΣ DH°•Ñ‘ªXvˆƒC(‘®~H¾Ý:´8£ÑªZpð«ð¥dÕ™÷ÞMqè¶æ6q¬—ÒýmTðÑÓN*þ‰½„ܵ‰xz·­’ËMŽ–6\ÄõšÔ•“Õ¤TM~ jº.ãt¡#ˆ¶w½ÿ^084ÒiŒÖÍ™ï µ[½Ô‰?;°1íN×6¡¦m.Ûÿ¬Å1®@ïDï°Ô/ÆrÚ]ùA5|Ûùà°VÔ!Ë0þFÅs-Û–ž­ÞX{ñ><>z¥þÍØ6Ñ÷~ß©{ã»W™˜ÌÚo1ß³™1_QI¢~u—ÊÄEñ¶=-Ê2ä,Ø‘¯+_¼¼]#²2ŠŒêAkL_ÀÙ-‹'²(¿G‘ž‹«ÉmËŸ·¹XÕËú©®€.l/U2+¾a‹y@õ¾ÌƦ|«´E#¶A]‘ÄŽ‘ð÷êåæ*#pHhÂI·Ÿˆò˜äëîo¥OjæqÈÊk¨)YâÌ6«Ž•`ÿyˆºã>ïÌÝ.cŽ>úȵCS¾)S’ç><¼h4ƒvHÜ@IzùÒ-‹»ÁžÙWÓú¿÷-ñ<±R´>ɦÓá-qâ+ )[•ɼŸ*3>‘Mß&¾WúfZUôXÄÙ†äÕ×ÕIìÅx4¹É/Uó**Ún;IÌQç8rW–Ie_1Ü®¸:p”¯ÔBð3u¶­™Ùš~Œ=측¢FgÏY\ùá烤C¢ØÙËàQà!—ú?µcýg?]ßô›dUC!øz¥ô‘kÀÐ^ËÁ…'ˆ}Qûóʱ®¡ö@d¦oF* -wR &j§¢ÉÉÂä¸=I-ùþ­Y„(«þÓ÷4íaˆgÇìñøÕ›¾^ËÔ ZäÂJÓ¦Ç1±±µò©½‚•_ŠMDÚ…9çÜD‚x ù–¹ã|9ä©J÷½Ç¡8^å„íמn×¼:‰ =£œL|\émÂ];Ê_ByÑñîK™Òp &­Ì›:‚‹1Ç äu‡¼HK'£Zõæû34 OG(°>ÂJ&Åš;,g†•ÿš$:?éº ;¿àI dD[çÁ%ëùZ›Ž:¬“ù«ÇI§ru ÒíWÐ ÙsG­<:œÚÄ"V³-:ß<Ôj+56ì)éˆN(‘´5]N¤S}KÌú¤gÔÉrz…„Ô“}èKØôîå¼1'Áµï¶¥}7z¸;?Í•  ðm§ uÒ£¸OUPUÌkÎòŠUåSÒJ³9ÕF¤q· Æ0xÇ>izÚÛ¨ èWÅà¶ÄË,bþ*MÚ”ãÐqƒ#)ŠÝê¸ÉÀûbNB2×¾h€e>iy¬"‘ÊŒ»ÔSMRÞU'낸n?à™àäШl'CÑÖŸÙŠŸ™ÍÌ!n¸*ª¢LGV¢¢˜:­lq5oÈÏ-Ó'j²ÄÇ ö €Þš;ružì$ša(›²yÊ5Ú>î¶/íig±<&^&cúy¿-äàBÉE5 p·vYy Vj´³ú&°)_†û̗Æù ¥1”Õìþ×§yŸv“ue"™š¸>Ð5+b«ËwpéŸÐ¬!ÅÝf1Òíö&–^rῪÆÖÍehlÕö­@& xPã#íÿˆ ÂlÓ;ˆOdg—Êãáv¨ü%dEüŠÕHSõœwë§£Œ™évœ6X:Ô¼!ð[C¥ÜDnŽ1¨pñéÁ÷”‘™çEa©ƒl»N¼UÎÇ‚ƒ¬7¨K¶RXBëVc=+ܤPÐ/õÖMÚÏÇb‘j‚ ò°Ù_[T¸Ö}Fâ›l`ä2ïR0ù«'š‰¢_ËP¨Åî³™1oSt¾&Øc’ ²g‹+Û'fÓäšÑä*§øqL}˜ÉwÚôw·S>@àÒØzsn$†=åC@Ù+Ç™»Iú庰bOØîÐâ}elwªGb/M<¬–¡L·b–sɃŸ˜m´‘ÿ¡ø¥·´“©G¬ÓÝý.ÇH¯Ý·˜¶~0ˆT÷ xÌ·8~kùóê»åØYSëœáDíÖÜöÛÖ5÷J±iœï¦4šÛ-ù‘.LESÍ;ôÊÞ‚zÂ-:˜×kß²6‚?1¥~FÌI‰0ýu¿E¬ØMŒRéZ hIÇø(Ä ²ùÑnÙâËÕ‰c;fqˆWY¼]Á²XaIÀ¿Rhƒ¶ A–†­l8#âÀMÜ9æi»øñ T_ýH9}ún2•7ÅŽ¤¡І¨±3Q<)ÚÅþ…\á èèmXËQÍ’­rx¸Ÿ#ýmhÉ”k…"ýÕ0Úf"Ú„N¬e˜Ä†Ýi¾äòðzÍ3Ì–ˆà´UQ>'Èa·¡:NÓ÷Õ’^T0YíHtH¨oƒKr`vƒ¨_—Ç:éÎomÖ¿Dÿ¸ÛùHÕ_Ò‰È'd •ß×hãD4º†±¹‰ %ˆ¨;x®Û)W’Î8‰›c3Åj)_6†A Q¸pímÑ œs/ XÉk×`ñè kãÔš²`·º5Õ ÷†O…d‚RT÷ÍåAŠ‚i°áhhãÖÝÊó(pWŰþB º7àg3«TËfBƒ0(§s¯U9möµ›PŒØîj\GF‹•xwqO# ‹»íé}äÑU ÝÜ §\wÙFýÒƒB]çg”³¨8óñÍšáX"ƒb¯€èêC(ÙI;;ý+HñdDL:¬íhå¨gЕ ,…ˆ™zŽ=¸f (ësñ±vdá$èv¥¡&¸=Ý"çÙ—}‡–Uübm#$ Tk¬ŒZLÁbj:B{Ï¿ô¦Ë€¹-¸²$j}$¹B†ö¥€ÿ+¥ª9ÇÅØ7<Ý–pÎŽ¹b¾šŸvóU#ÙeŠÏ®ƒ'JœmÈöpœ‡&ÜGß>ãb0¡¯ÖE#B ‘³‡2h—|Þ[EsG dÅ.%Ï*H¶¥¶jV‹°2s¯¥ F~róªûá^ÇC®”ôTàØê|R-uóÓ…èâç®Õ%’&6ÜJeŽ #Í…Ò4¸cþd@igá°Ýå‡.»'o8Ø¡¨ðé9›öѽ<^úçý¥J3ÝhÄÍs†ØËÒ¯2òg—t½tpÊöîKš÷ÍcÍ&C·ÍHÜ‚d´˜â3ħ~“;_Zà§;óÃHPÓ•gkQ¬¤RnT)Y„å†ÕPë´;H«@*x«Yûê ,”8¡AÙj8#6r¬œÈQƒÐ™…bÊäÖ77ïFHGÓz Ív œz†­>Î]ð‹Sñžz½JóFÑ#ÿp³É&óWü'>Fdbl‡h¶¿À%^ï/ —JàS'cAÇ´³Ä%Ú~¶H{AQá/á™pr)7o§³êåô“§a/¼¶âp¾ }ôqÀ(jk+**¶–V››FŠ|ˆ˜žCvƒP¯\·BpSnЏ”ÉUìØ[ð3ÝòÎÓ…´²M?„†É³·‰âÛ b˜¹×ð'ä =O¾ƒ{ dYB)zåEpÂ<¸þñv.÷ϲq™&wÐSÙ0Ŷžªú¸û9ãã¼ÁÙò/FK%ÉÕPK½æâYº ÐÌi©ýmr†#±'©ð‡çxׄY2(%QÁGp¾”yÕÞ·¶kÔô ÂmœJVñu3úê¥y<¡Àþ§4Hà ›$±²/ß“*¿´Ae’¯RðЉìÓ"¸5ÚiÏ|­­qh­|cl+{À"¯õ$áv”é‹×EzÒ— úi"„¡ íÕLaÁÜ jè…ÜnCOM4¯Ž¹ÐÌWÏF'‰íÑÒ_ÔŠopÎn&óƒL fêêh“ž¤¨˜6qz «†(Ñà„µK…Û7Çx ¡¦ª8:öá›ôDùóB¡ñf†*w%’Zl¯©Yw 5Âëµdy^¶ÊGÊjâˆg²PŠuÖ_b!; ɬ²g½…MŒpêØ* Mz<Ä-0™™/áõ—s&œ(œ6ÅWPGàý“#u²òqfÀ‚ÇM %”ö×t>ù}°œ‹XÑf\;ê@Éàˉwú®P¡Åʰ=Å­ðr›d‡?ä°\hå:ðaNö'zÐëÓ$ËaãàA_h—”ÀÒh¸>Û¹šSEÀk$1WÆm<ÀÂĶȔ¤kKƒþYÿÕR{gRóX~n„µé j´«ú-õ~Žl2V Œ×úÍn3ápƸlJϘO¨CPÉ ö}umdÁ|7é*¾IO:6WB¥ùþEhÓeXèæy8î«ûc»ù¦ n°ÄǯvS0Tkv}¯ Ÿ¢++äX -›ªuªÆµå£Î¥â` \ }cÅWO ~Ú`‹6õ㾕µ}ÒD nÐñjU:óŸ}²D±Jž$*ù°æ_2N/¿be¡«‘õY»Ãì%ƒÅ¸9ë®L‰ÌLѤz4ÀÕb,µŸ&õrÉýЬ€BœìkÑê6¸Ê¯_ÓÃd*‡¸šüþÍB©w"‹ÀFj×ÕžïTž· £:®4`×a!@‰WÐãCˆŸ†o 1kÊmm³µœ$×@Õ·9) ””ø$?ŸÌ±[2áœ6}£K§ÑîªäÃX|稅ò 0!#Ûl‡DiN“§ÈL­–Û´fHÜW¥[‰~-Žpä}@›ÌÀ‘PH°þ´ÔI_¿i%cf¦ãe-*ëÝ (²ø4,_Tì~0ÙÖò"ߊ2·ýÔ]Ëui [Ãæ=.æ2j·Î}òí0±NÅ"ò#²§Œ¡úÐãfÞ—¬ÊêIÙѯœdZÉo³–Ú¥pÌî–ûcH%àwA_^ÕfÌZ0mRK±ëƒìÒª=—ޜʨ@«¥I þxS͹ATÓ6þ±Ïµ’Åqìö Ú Ù¬@A·Ts”73 îstt\e=ŠüÖ:É “h ?üð­†Vœ¡0ü„·Ñ0hí²žvXKŸ`Üõħâ>7œž Q†¦‰=Ò¨ˆµ^}†`ÖÓ”ºÊåòÍðf7w&0%Øî×Ï/¨ÏÃÌ\,z8vd²È–ÜüG¾ œ=€ïÔPw‘H¥)¢¤áXÄ5A£; ^ã·ô˜cÐ Ù”©Ob—ì°¬. å™bò‰¹}aM=Ø0Q!¡;‘kØQŠ'å_b3Dym;_•¾zɈ9æ4GÊ„ë IɪdºCùÖD_ƒ¶¤î±» Œ÷iúE[Õ1f‚z©õ’VûS9ï‰ÑLVøá· fåôil_zX×-{Æqug/B¬ª31Žœ¹$w™Ô<üÓ y!²Šû*ÞØÑl$‘;:Á;}Ožr`îëËÖ=2ƒYËC3¸à'ÍØù;™×EEF”-Œ|Á^“•Èæ7H:a&7¾Õ‘ø©ô»o»”s°ðב 6ñʘæ>GÛxŽöË8•\µžu\°žkñéü«‡J·Ž 5­¥Pñ?§ðJ“qžä‘<ŒÌÄ.H°ÈŵÁÕz˜x0†¬óa°åpl·³'ÃSû+^ÍÉœ‡³ßvÑÍ>Í¡ñøMšìqbO{Η A¡×V@>^¤³¨© ŒÚ#ê’çÚŽRhÀýXP ~hôPüj=Î#Zø‹Çµ’QêpP<^LƒÄóü"# öTIØ–ÏûSèr)®&wÚ 鋹èZD…å¨×fAÏ[fï)Å‹‰YŸ´î×—æQ|ú‘ÃãžFr¼WVpFöÔÑ»þc MêB¬Ýhq‚;V˜Ã••â+ Ÿš­2Í8§ŸÍ¶Ò¡Àô¨°åüpÍ‘¬KS™I¥åH?"|¹y#ÞóË.íè¶6»\Fy·bt€'P”fΣ]Š_ªß»x¦BÒcÆ[x÷3oÒ•J¨á‹d”?¾5ÔÒ·`I:ì•@™¼,üÑ“ò«iÖp¡&{7yËÜ&#Áñ¶âº$Ã"¡V2#í–œ,÷xˆoíú%‚šf=…—8!¬%›!ªap†â/ß"õÚä«èNäX½E³!I ÞÏ ·6 û0¤g¾Àäy#ð‡”™ ÎO&.îù4 øn«múlM}¶ìšóc~çgåMV[è½T‰GD5EŒë³ÛFF™Ðš²·™žsWÊ¥ý˜:Ó€z›^‘TÒm˜süy‡bYìT®šsÕ´"È3Ÿ6GI~%Ô¤¶_a#Êùø#¦„°¯lI“å&û¨)‰Ž è)ÑØbÇ;,̇ëñX¹˜M\®-Cûngó½Þ2,!”)UÌHòU%šÀèyéjì{&/?¡!MÞÕh‰¸Þ@F÷v9ö·Ô*a°/’'AE{é»e;H?ðŸL#ˆ»'´ÙÀúë|äõ¤ñ§ûÛe:` ŸM‚i›±üÈéðÚßÌ£”¦pJ=ñ~M_V5jÃë¥ ×Ó,ýrºNèú1ç—ñÖ$R™ÐsLXïí]"¼z‹ªg¼MoŽÏü%0"‹ó^£ž|Å0·7ÕF|¿ü[Ž+»mŒçG2hˆ§Ä±Ü]:,)|QK‚¶9õg]‹\;ÅomwØð¹õ>cW‹toOÚZN:ë\GIìó*¨†Ñš|eulw$ãz˜¬¦².µ1 |îËh7 [½þžÊ?¥Ç E^zÜ8úË%s‹|KCÚ¯:ŽFœœèoRcp<šò];¾“b°Ys›‘ÏNœÉû±~[°Aàosøˆû\ŒÑIÃa’Ïrp>ÂNÿUB¹\ÕK¥{@-P µIÓCÛkƒÙõPs`‡;*x"ÞkLyÐ)3bOÕÞ _zÞ[ûU?Q‰eœZ‘=»¨©£ÚÍþb¿?fÙÅ1(÷>Ób=Ѱû\Á{+`»køÙÙç|¼ë¡p"'&Y2ëÐZ¬ÄÒÒ¢.2?x]…׃§Ôø:|m¡­x¤ÒNÉã¦7þV2ÓA†Wê´#ÊÉ4Ò¡šjðVf!X=vn`ZÕY%`7EÃÈ×úÙ RŽÔÛïtïjƒ~úÎ8øÍfv ÀžÅெ€_!¢ÿeá(zøóô†h\<ÃõÄ ~Þ9AvÀÅ ƒLÔ4.3ˆ9[vMàT[ÇÊóÇfÙ¨ÞQž*ö»YûÍ'¥Ánß„)~µvaOŸ§ˆl‘Úu˜ –BÖ8tÁÄZˆAdÞÌòã+ Ùš¼é¡:OA•pŒ—k]H œOùw²áV#ë·ËÌ[ËK£•|Bn‹=kÁ½ú  ½Äh©Hüh奣˜*†!ׯ¦sŠ(sDQkÕŽOß1,¦8• ôg³-ŽGÔ’ÒÈpáŸ{iœÜ˜!w ¡Š1· …t›Z”Ø`¼Ñ¢Á,Ù„h@#•Ñ)?ÃÚõŒ²t’±“6FÎuho¥8ºÄ1íãk7ÁWÈU·ÕÀL‹2ÛÆ•Ðps^èXÇôZƒÏŽ?+¸éxO;-¦èO<Y?9>í^ôùCí¼íäôE˹Q8mÊû×}ôbH"êžö=”ᢳa,Z§Ù“)ëPî eî[Z–r [Tì]°¨•8ƒï¢Ží(§R" "úDjGZbpé—A*Rº\Hg)ÖÝ•"~În½^"LŸ‹ÐëDo½Á©×OÅç;‡˜±Pâ™ý’„çÝŠíH»† TX‡¼%[WêDH­ñb:­\ùŽÀòµØNzª`!â,®¤°z8sžG.èÊÔž¯Õ/áën´!é‚?™”lÔ³ˆé5f¯Šé<¬ÙnÖbä-"˜EœS“SNf£u°¸Z2UzRí.ÅÁd Ø a½g%{q¾M¥åWxOIZ2œð”L%¢í-sû’x›˜3æ¸wÅÑÓÒ®mú–„ª'Yoêp-@±ƒ´™T&Z²²œÅÀæzpFóèóÚßpE–ÕÐæâp uÙºõ14ö_­‘H»£Á’¤!&q¿=´ ²ÁÒÒ#N®ìcc FÌÈ~´ˆ7’¸Z$YÊ4ïßA ¸ªy°Õw•SŸF_*K¯„£S¹Ú•æ— Å¦ÅÍ–‰¤Õ|‰wÞ`Ú¾•]60ï3N,Äí)ö_ 'TGJ£IÕÚê—ÃÃ'¸—¯õqÄ@i ©ùðÊ®Œ•àôuiÆ«¿<1WÞŒ {¸éñÔ½KŽÆôx”}ŸÅHq1æP¿Ï›|iìQ•/TWÝÑ‹GÏÇë'{?Ìi{%Í‚ŽWVûé"R9$ÁNMt*Èò}&Þa|aIˆ™®¥h'´dLx+ߟ†åÚñîx-Í¡ÚÊÎò9Û17›£x$V QàI0eî–| ‰èµLÌiýº‘=‚9¬í@ë=ˆäÕ,qžÖC üKÛ'd×Á¹ew‘LŒpЛ.M™çœÁóÙ·qzzÐ2bÏþ¨ö52•¦¯Ýgð}6X?Q™1` ’â¿“¬óþt.< °ejüÀ¨îÇÆ“§É·oŸ’ãdm|)pBoØ‚jÇŒ^£B†a_¯n½cmÝ’O¾fŸž”Rèúš‹X}?wIäN&ìvÊÙÙ€¨‰:·«ü© hAã |Â. ñ_X ,ÎÒÓ8œ›üè¼O¤=ǧmšI>¥Rþ͈ÏÛ‘¦’x¥0$YªLÈÀÊó'Á¾öVlLÇd¡¹ñŽ:»Nò€CYÝOègrÝ20)¿â›¶Õ¢Ñ2š$ôü“+¢ô›Èv?b›$· d:‡n;Í”§ _1gìaÂr_/YY]û±ƒä0¡…àŸ6› {¦†©6³ØS2%Ž—ño~ñ¡¡"Hëé’ >*fteDˆîŽa³¿’ÁM‘×µqª¦ŸCŒ˜•gw·€ÄÓQ"€& ÿô‡ÌëÊÞÌ^o“AÃ’ÎúëT´í@™VuÿXaÿÀ¨Õñ‹”_cñÒű•ÏJP¸^2Ü?KÐÅÍ Zá{†x§³ œáp§ƒ‡¹qÔ”^Òœºï;E-ˆf´ÞâŽË«É?£ËØídä×þIù¼ ÅŒöL”Θ–…äãÀÄÜ@p„õD“?$[îq âøefyô4v2#¥âë=‰ ̨ qúx>/–QÁRðÒà€ä}•èv4ȉ5YÇc£×hÛeø°aÞY=IƒHS9·:jœNÈu`„,‚(Ï ¹bCbW$X>X¥,1}áY±í‘WFâ}µáBÖMcMtæ9 öJ7t¬hûî[Ó‡ÊOÅ·8Å”‘ãî‹cš¨  r·l¼¸ìöUnë{†ÏÓÞxy¿ µ…‹}E=~å’C«[S§KÏJ@¤¶4gÅÁ(,JY‹ï¿ HMæl§]Éñ瘯Q§Ï-=PÉ 2ÒÛo9;®žkt ~@jzL/¨`÷_yÅ€siÁ`Þ|"äâû)ŒUWùÛ-kA*ê¸{‘¬À}á‹ÃA×*ÉZéHOœ ižË-Cýóù­þhy[L¿†½ôà”au‹ê.^*ó!uÉQ^ÈÓ”Þ¸5ú⦱L’.£rîE<ºMc ÓHIožc¤è¾ÔL ‡ÆYw>ðóƢ˸—¶;ü–7îäçÏ€vÚK´tñðX°õAv ùg`fHi `1—À`©È d¿­”é&êZ;l*TrÚñœÑ¼Orõœ|ã[n¥£à»„ê8{nVNQPç¸;÷íú%œp‹ù(_™'¡9Â6Ø<Ðå <Ö÷z¤Õ§ôËéRàÙ‚5eN íæÔØy²_®Ý ®MÌ@RiõûÈ4~EL,Ç©J¸5M}IBf ¢$õYgpÓ%ÛH´›Bš”OÉÿÈs~5ÓLGÙY7CSGÙw˜@Ô³q¸Ïk¿rKZ)`H²Ûp15t®êzȃ‚;l0zöˆY1×£ŒM `œ8jŽ\ i bƒÚøŠ;#S£t|b-iQÁ_y:´Ü¨’…TIÂñ¥ñ—L5ûåf"+ì½øYÞV"LÒ”­ŦUÊÓ`›ûiw¯_Š-iOÞ›:3fãøDÎôÆÇ:oWDD«6"û:p!­Y§qÜsÔ–›bN{ù¸œ<m@ÆSkT8ž_R7*<Äœ9,“²æޝ±P^F¿¡Ëâ›Ë“r5¬' Ô¹‰noZ–†²mþQðFÖÃ]p9äx_O¨ÚÃôÕµçÓä ’4”sc€O\”Pź_>fOõ!ݾɃ™àwi’Yxö:?ÜÔxîñ]œÒ×T­½Ö\aâ©ǬS˜%ßð¦Õ(~C ÁWY‹Ë,½IÃ×çNÃÇ{ۮ̞%Ãí,Ä¥,M‚íöýU!ãY®­BÏWOf–;Kq@ЍvóeZCgêb‘žE©Å ë$@ÌËÛ?ŒÙäæ`Ó‘M5ŸA˜G)¶P¢ÿÍ)"Óx;¡§à ¯…œ“àbP>ˆu›"û¬øR›Õ̱èÉhŸ·jcø‚ ̓jØ’9m-?SdfÓÊÌÜÀ¡„1eùFö®­âŒ4½á™¤K—ä„l*Ž D¢`­Ü½–TG¾-Óå,uÛóÙPžÀ®×àë—å›õfvX9s4 âÀSo#JÕzó8D€ut^WÓÝ/έ×mÈu–óeª[¡ÂÕe™ ûÖ²&Þ;ûIÓ{&c¢#[–þüáÉï‘5]3cç}vâ%[®xû¸lëKWnR(¶;^uz¹~ÕC½›š8÷EüÀv(ÑærÌ@ðU9ö—’O1 Ä ?d^´ûÁ¡ƒY¾}"w¢š¼ždxërô¹×YÆŸ Mª<ò¥5aÖûB3îj´òmS$R5ýiŽQâŽ=á±YÐúy¯¹LMº9ÓŸÀÎôÒ% œ%÷¦ÞÙÔÖé1yqd´y€¢'7d›ž{ñ¡•o 㘚Ÿ‰9“÷1ÙÊIv¢Ç®¦Úæ¥Z)S¼AVò|=äêÉ}9bÿSbtHùczÔMò!ë­ØÜÍëQ4Œg^mûq“w“„üøŒM+uðc¶Œþ¹Ž*꾺º¸ZlôŒhGÚ6]Ï6Ìï‰å¡K4¢¾_"ïŒN&غ füŽm;¨LøÎ½Æš˜ìGxÙ¹¯‚³1ò,¬–uke¡a”ý+EµC‹ÿ°31¼¬Xv+|ª=%Ùø˜´ =Û»,k—ª>8„ȸÐòøˆN¹¶:9‰7]¤3@„æÿÀ€ Œ Õ׸fÎ7{ ¸~.÷í´·Ra$ó;¬K¸Â],ÜñøŒ‰m‘2]äÛ¯6[¼7g—éSÍv¶F8ˆƒ¤Þ©ÍÀ"é—à›_¸Dzi÷Pµ?ôò¦š‡N²Lâ{a#³o6K䊊ZL‘îtµsÒîÆÚqa«ÂÓ=uJN 5ÅWÃ;Æô‹¤¤ "…v\l†ñ¾¤5©µLÄo¦§ÅÕÐve6´YëiR¥Õ¹’Ò² ¬¼L6‘»ÞèïöÔ¨Žß|¤¹æà»/ÏCt_š ~5lðëÞS3#QÎ˜âæ°+ñCÓ ?ZÊÀ¶øðÝm£8$TÒúÕÛ&ÞåP˜B'%n-¡¸¿jÐ <'=÷§wvÔís3Â}*|3IåâƒÓèòóG”Ñ{sÜ1üöêh4JöSÌâQü-²pÐÈŒ^œÖF¦(‰g·ñÓãKodâgô_Ò©Õ·ßîLü«À‘ýxµäN4Qeý±¿ ±OD0÷~ð ó;*«À—e  ƒnR´æòó\#èm„VW[HWö¿¨ìk †È…"«Ö"±m¦•ÿµÏplmµ2ùQ›mŠ/¤iÜ¡mÊ4e ‚&[Ù%y­k÷¥–çÍø—ÍÕðÏ"c­NEØ×"ÓbWˆhwxy:MŸÐø¯ºðè%r³ò8=Dì©vÄŒšËàŽ›a2–åøÐó4(ðÚ$Ëúƒ}Džª,‹O.>¢è …$l£LÝŽ¾@ê'÷­³.idÓ!õýrgme¸Óï[›·êcæµQêß@?…ÚV=ñ®²l»ò)"0ûìtfÙn«y«ï‡¼=eN(ñœ‡+(kÁŒ)‡0&à“^GY‹*øÞÈôøv7–_Øph~õèz‚]Ù¤šóönÙEŸ"9ŠûxÝ3„MèÖ ÚT‚ÓñJqBí«Ë )œ5.ÌK­…ƒ¾²;š0˜?D(¾å¬rž¸µw5f;om@´¦-ˆ7Jåè,#{° çpÈÆú–Çm¦ÛS·Røó¬Bã#/«ÐQ nth30ÈKH ªB?¾ªÖü Ñ©Cê+÷Û¼c‹ÄŽRÄ–í4 ;ÜLNÄ•_1ú;Áÿ¤ [ój3Ývhóºì²G_Üõ—Ãl0 ó²LHÉ›rg|Ì>|Œw‹Qh<(¯¢¸‹°áG¡t9üBî6$Ê—ôsí‹‹/«ù>,i¾p(—wB ,Eñ,“cØ~A?2ôȬ¦c+™VqäŠ‚šŠŸæfY ¶ (“¥@DÁ‰ü….çà«tu?¥Å· šzÉóe ŒÂ‰”’lwóÑŒé²Dêû@©"I‹fAªDRÚÁdE|Î~É=Oš¯£ïñ! Þñc.¨ì"IšÀ~'‰Y׎ýÆ”Øb{Zý8½aP‚½ñ÷¶b± ®‹, ÙŽÏ–ÿ¨úq©÷TÊŲÿ>Q¶>•Á¼»BvÌ”+ûI÷ò!À… 6¨âܤ¼òqäKBijdîŒ@µÃ:KÉ×Gä9"Àx ÐWÞ0˜È1Ê:ŠÖÃK¯X8Ê QÔê@ÿVºÃum%ó_€w±PŽJú@Ì É,²Ù:â³@ö€a>÷ŸÓĶÂO% _¹jfZî !ˆ7>Ò¡ýX%þ’W§¥Ñ[}dÝs‘ç·Sê ~Ü‘²ì·­VKPo£ÒÎUæStòö€¦|#M#W¨Ðª!Y´œ³K%Çd$(æKš¥MÍ0£lük*6'm€FÝ’l ctÞÑÏ…lI`Å4>„àIÐØ@-ÿ—y¬]œAy¾"üÕT¶I)z|©r·cŒÒ§U7ÇÞ1íæÕZöºa­CÅÉÂÒŽ ©hý¥Ï%ûW½ÆÆ”.§ BzÏüël#L)ë„[ˆøóÐO¾ðèöÎñÂÔ¤ý˜,ÜD¿g¿ÈãþéÞŽè’Öóà¤ÔWÇ5N7ÂCOücAG«¯O½„xæëÜL¯ ëk éòçàãâ>Mg–€ÈB†šƒ'OŒTþm½ÚëõñEêÔÊïmîÊZ•³ðWÙ^ôžRx™Ý̳ Ùª›yò¾›ò¯4pG¥³Qù W©Æí½·•UEqض:ëÚ#­ý³§ðxJÁ¢»=£Š˜Ž¤¦Å>m¯Ù3µŒ;M4„žÌPç_µ`ùÐŽq#t}3¦ ~Fï24ö½ Ja}`RaÔ¹\ÛsR]8þ-Ñ _XÀ¶)ÅD©Ìr£×’á×Ь²¡*cÅʤŒÞ&ô/]‹ö£[®£{IDÏOd+‡ìN/š`JíO‰eñaØÕ~P}È^@®hòBÃ#ýÑ*T½“k‡M|üÏÁJOÛ!‘÷È~"y3o&Ÿ;œŽ+U¢mp¬ç+o`£œ HüA…9ŒÇÌûB탫|¦™ZìRè‰LÔäœã:d§knÀe¡œ­´ô#VÑ/C¿¹mÄLoðÓt{¤FJŽÐª»ë¢ahÒæ]? Ç™ŽÈó·2MIGSãàDÃÀ1 È0†^R¬ÛÄ™ÄRÙ3·£ht"мŠFåTv¬Šfw¹û$3_H”òG§˜«UÎ;iï¦teÌåXG”d'ý&ÇýåŠ)ç¯ð¨·±éH9Û›÷"þýÍF`«`c/òõ–ÊóêòĘóxq‡ŠF6,×ïïdxnõU@¬Ñ€môëz6XP5w–;Zƒµa#©A-´åœŽhÈâR´.HKÊ⽈0CQ9(`Éü YUß1´…ÂA´Ò õöÖo ÀøY2šQ UwEƒ¯ÐŸ©ª ‚ÖS`˳\Øñ=Žˆ/âÿå…¤¡çÁ:ë.1ó£žð«•Ïèјbq ÕwÏ5ø–®U2«æ Nõ†O1µZRõ”}] êm‘üVlÞuÑ¿U£—è"ŠŽ¥åÎùg¹ïv‘\È'¹Q,@Ýn9S˜˜F¤ãì°Ÿoz™áÃ=+pu¤õñ##+HS¼®X¦ýoŸQ± *æÉi¼šÝä Àßíxô6¯ù$Ûü˜À\ VB÷@_4f8B}h°ä~!$'ÊôªÐ°uTšÌïø»ÇA–ƒÊ滯սëÑVÝrFåÑ».”(Òý¹z2לz¨ )دµ \Žó•²ìO\!Iè%ØÇ8JÉXì¿V ’Jó²{[ƹâ |£'ËôÛ#³c;µCó“;z“˜°Ô£˜¾£@iÙ  [s²:á²|„æÚ|€DúuŸ¶£Š"³bïúºKë®´%iCÚ7Ô-œÖá\<æGmàÔGŸÍö,•aïÍMD÷ÝQ)¨üOg­éÃÙ³¬JÞÑ %ãºk8g³›kÍû;Gè™™™PŸ@Š’Z~tر emzp7X \Ê%~?åÂäQJ.RÝi\@á­p³±bë?©9 „ƒjÒíL‚Žú–|*œRøŒ¢!BD¦Ñ8Ååïšâ™Ó@–Ï[ËÚ*â©D¥ðí7>¼žo=R“ ºP°Ñ¶ÆŠàB¼Ôà/ºg ˆ<`/VU:ž:«Ê,’µjúKãAEȽN/3å¡Wq`¨ž'~¿¹gãÿI"ŽÖ¦öãt‘ò>'ç°æŽõ²ÀUÝ ôžØ(=ê“阃X4¡ÃˆŠ …–üÜØ[Ú¹íÂlàIŽq NM0·'aŸZ´Yà*õ´d» ïmç,*Èãtþw6ôÙ¸vü%-M~–:©¯sýlÈd_YÈ—¤4ϑ慔˜HlôË ¯ïý¢Ÿ«Þª›2KÎf‚­[U°@†r\¨<:oÃYÔìïûh'Ä™¥È»ýE "ä®ìü¬ßƒ¢5¹›‹«Ìzl¹ 0E·fÅÄËè2¢à8G*9_5Ï÷òêp#z†[®ãZ¦Ázn¾½sÏÉA²t."H'k~O‰Ïã¦Ø@Å0ã—Z\ìp¬·ÀzZ§Àl¤Š ‰k—Ъ7ZÐ_›À&¶’áÇÓ‹GÇsz]¹ï±RîÕv-§ïxq儽—¸2*îplì ÒsÖýPw¬²·¨‘Äö¯ˆy)ïÿ}pHÌ¢-ôxFpÉ0›Éæ°“Ä`;xË«¼k[®joöB&' bm-ûkIUáFðº#ë ‘|H†@º4å%±šÃ^/'y>†6Z"“oJjPWµlèg3éÆqð¡— aÁáCž¿_áч47„S¹§Œ ;[=ÖÞ•tu§ #øÀ§Ÿ‘¼³ ñ?úä¡'Õß p#˜ ôÆ&wóË&”RÑ÷¦ˆi²ãh;i¡âYmÕ}…ɸµ9]¡âÀm>îÒŠÛ›Òpç…§.Ó¯Šk(ŒSJ°¼bf¶ËßéÔ7õÃ-EbdzoõG:Ò†¸õd 0 L*I Oî£nØsѬ­ì‡*ºG'„V¢ù•\¡w9grÞ‹$_¦ï¶nd0}ŸÉZï"ÊQâNùsjÈÜû=&Ø~0VS+@þyƒfÙZÍÏ>HÓïbÀ¡9ÃBçkì2Rþ9æÑŒøê‘ߌvÛF̘¹ ºÙÊyn‰ÕOÅz.˜Ä?+ŽŠô¥.A•2ˆ±°[H÷×€Ëkþ¸¥ÍLçSæÛµ®®€\hŽ #ÓüGÒ¯H©æù» RvBËØkà/gZ—ú´¤Ìë¡µË  ¹x=ô…žžÜÙ£D=ô’¦_I¥ë λAPRÔ©OÚø¸G /ïx'ÈB±”…ak3ïr½O/óÁ,{¹ÆjÈïÀ«2'þÝÒÙ3™¼Cd¥± wÓ1S™¡¸¬h˜Œç„BýùnZµ*Ö-(ÎR¨÷Ÿ?¸|êtß2×0Ï \΂D3ŒôÊx±ô&Wû½.×NΓ©ë&Õ@wBÎz‹DÔsG©ú¢Ê3Â`ImvçÒ¹.O×¢ÄðØLxDÑ$Õê‚ N“·»ø”™f7|;kÎ||‹“fmtvéz™µ5#CQ³×.L……Xͨ´9ë&yùBæ ‘“’œ%'“R˜]Îø÷ÁÑ#èµãÁ{ÙeG%¤?_ ÍÞP´2–ë{²“bŽÞ¥£¼ËKJ‹Ðûštie²GÙü;sØüljÛ O3ØÑÿOJ Œå|^ï~­}½,œ2¢›ŒÆ ø‹ ÐðVJºFªF ægŠŸþ{lÊy¹ôA2m;ÍE8ÚÁ“ºÅ.sˆE—~Q qà¦`{7âTŽ<«(ÁЩ ö>y¯»Ûd†·›ÐŠãTaL5Ø÷Åö–Íõ{|` endstream endobj 1224 0 obj << /Length1 2469 /Length2 15732 /Length3 0 /Length 17163 /Filter /FlateDecode >> stream xÚŒ·eTØÖˆww '¸kp î.A ‡ÂÝ‚»…àw nÁÝ]‚KpBЩî~¯“÷Íü˜ÅZPûø9wŸ{ jre5&Q3 P dïÂÄÆÌÊWP“WWgc°²r0³²²#RS«[¹Øk©5NÎV {þ?lÄ€Æ.`™„± ØTduµ°qظùÙxøYY쬬|ÿ59ñ$ŒÝ¬Ì ÌY=БZäàédeaéÎôß:Ó·6>>ƿݢv@'+Sc{€‚±‹%МÑÔØ 2µºxþOºw–..ü,,îîîÌÆvÎÌ ' ¡·Œw+K€*Ðèä4üÕ6@ÑØøos̈ÔuK+çTj swc' ,°µ2Ú;ƒ\íÍ€Np~€šŒ<@Éhÿ±ü?Œ€ÿŒÀÆÌöo¸ÿxÿÈÊþogcSSƒ±½§•½ÀÜÊP’’gvñpaÛ›ýehlë û»[Ù›€ þ.Þ %ª0÷øŸM¬\œ™­lÿê’å¯0àAKÚ›‰ƒìì€ö.ΈÕ'aå4OÞ“åß#¶±¹Û{ÿÆæVöfæµbæêÀ¢aoåè ”‘øX„ø[ftp±²²ò‚èz˜Z²ü•DÝÓø·’í/1¸_oÀÜ Ð×Êþƒèílì¸8¹}½ÿTü/Bdc˜Y™ºL€Vöˆ¿£ƒÅ@ó0˜NV=V0 Ù¬ýüûÉÌ33½­çoó¿šELL]GN†áߦÿU‹‰<ÞLì¬&v7€›àû¿”­þSÈ®2öæ ß?õ‚õßšÝþCºÿìÉ[ÀÿÆR Ðýæ»>+«)øÛÿoÖÿíòÿEö¿¢üÿàûÿ­IÊÕÖöo ºÿšü¿,Œí¬l=ÿc¦°« x@॰ÿ¿¦ZÀ¶Xhfåj÷µ2.Æàµµ·S›‰™“û±•³”•ÐLÙÊÅÔòošü#Öøkíl­ìÊ g«¿®+ëÿÑwÍÔ|8ƒÙù· ^¥ÿÍ*io 2ûkçØ¹¸ÆNNÆžˆ¬`R±sq¼ÙÀËiôø›Ïf{ ØîÐ`rBüëh¹¹,¢‰þAÜ`BýF<ñ߈À"ñ/âa°¼ÿØ,Ò¿8¦ÜoŽ)ÿc*üFà˜Šÿ"^V‹òoΠò3¨þFµßœOã7çÓüÀ´ÿE|à º¿¸ãßliò/bc§0q26ÚÍ]þsýGüÁÿufûGltù{>ŽåÿÇÀbú/âç6Ù‚Ið_ 'ç_;»ßõýų? 8%ðwp×ÀÿÉÀý—ÞѼZ¿]ÀC4ÿí®ÍÜÊ ø‡,±ø‚k°ü]¸sKOK ý`™Õ\„õ<_›? ¸É?‹OÀî7_],D_—, ß¹Á¶àgõ5¸‡ßj°¯ø]³ÿŸÙs²ýGú¿“ï%‹øø@Ìü°³8þ 9ÀÙ]A.ÿçŒÙØÀópú‚›wþ=M°“3ÐÎê‘ë/ Û3ãqßòÿ–’³­±³åÁþN ¾±f8L¬PL(éHÂSæúwŠüÈðtS—¬}„ ÑøiŸÄ=¿IŸ“—ßéP ‰cª…püIîu•`‰HË *”Þòá>ýP’¶õSá‡î”`µ OC’íjšþE+«‹Ôtú«²Óh~¡_ …Ë.ì=¢KÝ… ‘N)çxûƒe‡œH'd7cQT.íÁ5cÑðÏeyèD?J*A'ܶ(€kor±„ÔÂÙ8û×[™%w¡É9úþätks÷À“"Ké±^9<¥'ÃܳÒtçŸ1gº¬fÆŒ(÷`>+~|‡–'C.¾¤5iq$*ÚÚ|Jp÷j›°'ÅðÁ°Açi>yÐe q(@]V³üã ȈôÆ ZI¢gÖHÎX¯€øÌ‡aŠ.sôPn{ÛORJ]·­ÕØ#ù;írÁ<¿iÿŒ›îEOÅ~•gXý¤Â4CB©¶×étƒ?©Û$‡Ah%ÁK•`"º¨ÁÔäÁ\>éÃå¬ì[`e9*:ŽÕaDãNŸ:ÛÉÙ9òÀ¬4¤o«nÄk™èg;ŒP’iZ"ƒðþ¯³UZÓ%=l}B³õçÈ#tíà4^£‰IVm¢ÒÖyŒ»˜ŒewÇÍfJ\Ú„³UÈ"©jèó¼IÜ xÔFfü7pû3X(žÇê>ä5úißÈ:‚™è‹Èi‰W#|öÐùÐ{PQ‡•ù §ú#Ýǰ£ÑÜØX7b²â$¦Z3eâž öS &ÂJÄ\›ê˘çß÷eòêVfÅÜ}ù>ê îŒFa+ÙÕ6w®M½Ñ¼ÉVFýU%cp LA7íÖ¸e1˜b& ÆWc6›³u”§JïìÌäDe}9ç!'-}q[Æ„¹·åeåÊÁuÞNaÁIè ¨‘HäÔ`zWwí¿—V[â Í…PÕ|úÁò~ …_W—VýAÅ@\5×6;­F)+›ÇÁ*/¾Ìyžî+*¬M‹(!é[fTƒûžzU³4Ö›U˜? RçÅâ¸}oïÕs.éZìk`|ÿàŠ¿þʀ蒆“®~ÂÝdpK9˜æöb žOþbV ©…ßáVGB7<5Uj–ßåe5X݇Êú–÷1 ^¤ÌúµÏ°Ha½žªl«ÅoÄÅ:C"f¢ëU;“™­âJ2ÔÏ÷›¬ÏJJ_¯;ZÛ‰³…›^Êz¸à‹#¢)ÓYò õÍ;ìÆ,?¢:éÏš­/Ú?¡E`]×Õ7¨³Æ„ð1ÒŸ…’É*;œ¦­äÃãC9Sk3š%œÜ©„\MßA‚šƒº˜/l¶U sà¼âzØ3ŽÙüÎÄÆunvë¢UÐ’YÈ1*žb¯ÍdØÐb£-Üu¡ —•EUZ D3„49Ì;Ž2*“(ï¥xbJ6e¨„5Ä=ÃÑzš`®t“QùLß˳iÝP|È/!€…»c£<ÖGFÇ‹’Òu:ltž^­hð½lÞkØNWZkË(ñ ÈȦb*Xá| ?:­óó„ÙK”žp*Ê?þÛÃ’›©öaÜ/eLMØIfR7u½îýó²˜-åüËMº‚e 2á•ç/;ë–²Rœ§u š0޾È'i*·ŸÅšù³=H§I_÷¼8aŸò)ˆå;~Àz7 »5>ê%žú¼Í`pÇÉõɃWö¬º·|ãÎÿ¦–Õùº÷‡­C'qD"¾§bÐjª_O¦FJ‡›ê˨©µ=Ëhݯµ x©'=½ ZýÀCÇMñtl˜Ô&ÅÏㆩµÇân"*˜·™žC†Åwké´#2ä¬ #þ}¸KšF8U Oñ é=÷”M ¼¼2u½#Sˆvt³uÓh󠨀pÒÏ^Ìå9ù2"20¦ë: Û¾¸4rÖ¾ï`w&kÚ –G«àK:>ád>+©üqhZ(ÚCÅ7ýY5Á-*a]²£Ç ~H30¸÷sAs;ªå,÷;’?ãVÇqkÃP‚F¡_OP>¸¢ìQÔ„úö*aR´Zœñ\mʦ´8ø7ŸI³å#Ç÷qŽ˜W«ý¼ù!*—uJ®"p‡BI».Wû‰x‚σ¨XI–^«žÎÅ#éfí gA@ôfÖ²z]žNÛ¥FM÷è‰YÕ>!ª2×µ´ñã Ƹgý’î$;’TÈæ‰n¹Î¡n8Ÿÿ&f»ÏœÖ3ÏÐÌÙ 3NƒuñÚáö•½{þb#ñ*¥Éè“–ñÅ‚RDËäQ3Šü°"ž¯dšOòqá˜Oz¦äS«ºòèöúŒ©SÃýYô|ñvjœ“ÂIãüoT´õnϪ¿8Pª±ßðj 7ïÚ‹Ô²úGÌ?¹ÚK"“‡]ÕyN;lyôÈpQ0›¬xöÑ:¬™Ä.ÉA¯`x)(™èÛaq¢Eԯɳ°º‹·ªÍ0RÍTgY†gV1¥@ÿpü«®#4é?ðsóĪáI€uþ²M˜û°mvKwVÓŸÿL[•?…/WǯyÕc^(¤~Üz“Vм YDZ‹Tº*fo„·€$ÿÕ„AãÃðÑãW äõèdOeb7N½lIþ-_`E$káüJc¿Ó¥ŠÁ¾v£×´Wvä’Ò~:Ù}Îxgö§Øk!ŠäMi Á*ö®C> Æ%É@òín¥rXÕËÄ|k‡‰XÍíóo‡Šý¯È¿¾ÏõÑcÝ|bHe s¬\>–ÜnBËCׯø0JšŸd¾Y•uD¹”#­ÅÅ1ûáKLÞ™B?1¸Æ~"4•Ñ_‚à0± ½ vRˆ™£êšhví\ħõÃhsD Éˆ°YLh6ÃìŠEïfò\=¼É÷Y?îô¹üFêëö“’‘,4…Êk…¬›VZs¤çÒ·­ˆ1áúŒŠù5—Öz?”šõSÓà!Áꮚ £YçRüšÛwñø,Š!7Y ‹‘›MË-ß­ï²9G$…j“¿úšôéàšÌÃ}g+ôÅvqBæ.â¼Ñìyw'©Í<®Ù}¡Iߟö¼ÝùŠ+½"äQz ÔÍÉÜè£ËE¥gdÅ÷L&lËŒƒ´ùfÆë“ô|WŠ*ê/¤óÑ·1§~SLŸníüí‚¿î£2$JrŽ—w@Ö1Z.ázHã¾~Ô³ü`¨ïHkR^Ø•Ú*•|³N¿;<É! ÷žeÅ©t·\9äT•ý6HàäSyOË'N²œå¼¨ùu= ¶0|ëŸåÊöh ;3K*Ú¦ .Hi¹Ð Dì<<ˆZ Pé¬{#%§(÷W‘f³‚’†åbœ‘ɳܺ'"Kˆ”e†k…©½ÒÜ÷HMZ÷Î&‹Ì\ïÉ‚Útf¸ßj0mBÿœêdImÖíÂP¤/P:•µUǺ|Óý‚a@Ãh:übrWâBÒ…„Ü_l*·ÁÏ_†+u|ºFœ¹Ëg(¢ýNÿ£Iæ[îÆÍâ°éäìÍBÃO(H'R9Ž]ô^àí««ŒlËD4E‹¤ÙF±-=¼©ÑLÁHìýT-Ò‘ ùZuFZ¾ïœô D[¹4ixÒ áGì”ïŒ!_|]Y6×¼0~Ä8K»Q È#;äÑ9è¸s›.{oÐó\nqÔ3 P´^ÙŠ{Ñw%Âý )=° ¶C`¦‚L¾À­Kfütú¸ÜLj $ O_%å'wmÙÁޏQÏõ.C´Öm8Ñ*ýxÁU!ë0&yQœÌ~<:ôÞšíúúD”7ó–³@ÅD’Q†9ŒÃÇ!›‘ó»°zÅCXýè0çÉ+Ñpô´÷ºÉm•“\/@cÈ2/ÅÏã9iü ã\(Iu‘ÐSîM²ŠjF`vÖµ'~P{,O£òGÌÖ ¢Lù¯^3 È#Èü/. «.O†=2{HɼICÅ Hjx×Áî0<í®»µÇÂ#¡¹42ß×ve6s½O©gVM/>Aó&¾HI¹pÅD&<;CE!²óÞè‹Y—±yÓI|é¿gÛábuË—Nj º@96ŠÃÀ“Ù9_ø.|Ϫ,\zéùÐu•$oy¯­Ýü&ÇË{ ¸ûxRPR©“561~­iñz)„ðµEFP÷[;’+:Ò-ÇPQ¸VŽÆü©îí£=¬ú eŽ¢=†¯^1qË¥ÃÆTÿ½¨%žp©9©øIX>îàa»ŠÊºRH§¥ã×rò’Yò±ðÕ†ðp”?wýÊR’ÌäbÿÁz Ú0Õl õ>YªòerQúø³îdð’ˆW-ªYg«ùh~Úe)ûfÇ–ï%Ï¥5~§=ÓÒ­aé×kìp&¬9¢ˆXHŽGL~ëïiÆÏ0:Ö g{…1#Ò\M×@©%ó…ªT–Ht³qÿ‘ÚmÆ»‹0vñ@ŽoâÝíøé8 ¾dš«Òó5¡?›Öw'„1VmN—˜ãë×͉×4Í ¯÷®V+“‡ÕÍØ<Y›åóÜQ:?š ÷98€Äoú;ÂHˉ·,õŠÆqúع×[6’'ä.¡tLE3ß”3é³›m_Î§o½åD„uMX fz"ÐS5|iâÁñXȹ®;Ðûšpý˜³„e›_XÆ—ñ÷˜eJÜTŒeÖ:1 (h¿HæR¾DÄ ™¢£ºÍŒ¼SÉÅ›k°}™/=íf¥ïPºUŽžìeº5û‹—èâ8¦×ëUµŒìµöV\ŸÑÄ£\o!(N¾“­,#¾£Û*“üb޼¸)Pm¹™¢<*ŠvÝÚóSMmlU9½<ñ,Ú]·¯BÅ,8ƒðè7» ×h¼ ‰ öÑ¿çzëÓk_ò9^‡+3 à¸S:Š.’èg/yŽãØU¿Ò/Päôh²ˆ½a~"â2ö¢—“¨ç¥‚'àÁ†h pz­¯Ï3wœW:ÀÄ‘Œ×ãÉ­„íÜ™xºµ<â­ïx17‘è$Τ[ë–Ã{ˆz™Ä@¤på&so'|-jëšQ¶™XNZÛãäH§ Ò 1tØÌá‡Ùq™YD§g’‰UÔù‚˜˜aS`³G¹nx5Ø×úZMO<¿œÎ$±4½9«ô~L0Cƒfi&â ÓŒ¯¥>î]Ÿ‘ˆ‹îvJTs—NôAÝþ Oê¯|ˆ¡¬fŽŽ³Ði2±¨l˜z?eg®œ)r’>Sê¿FBUKjC£ò—O-|jôSë=Jܪַß©‡oâX­œPz3Þ‡«Át‘ó-/Á¿­øt$äî-ŽÓ¼LpžùæË¡¾ã¸™ë_Û \¿žA¾…×tžOH ^$6‚rÕq{úÓ…g˜x¶‚¦oBÿ†(mSûaˆ(ã ÄÖoÉxñýbNQøyˆí)Sƒ^´O–JQ±$ ãÉç™ð@uÍaq¥Ö¸¬~Þî–‡•P‘€ q§¨ÝX\RÎ.ó}fd§T¿.`Ü#ì/dÁ÷D ÖÃ=Ã;æ(qËrêmmáW1(¦iú2݆âîæìÉH¼kÌ_v8Ÿý^xÓçgIzú{6d›Aák¡ü¯Ÿl–™Ìq?3uLx[ŠÊVæ (H_Pëñ1 Ù^Ê’¸ÍJ7~®)Ýd!€Ø‡QÔš×c…óÉ1Æ|nªAåew…¦ºl.âû” –ç·¬£b¦(ÄÕÖ¹Á÷j‰´l áâ—LÊJ²°ñ1ð³sñ8Í«=ÇÓcUk'WÓ™bkž,ÌÌyKÙIÒæ1¡}ÍôÌ…äÞÂ=$ÎQhÇ ‘ P"î²%5icÍ9~ ¾ZÚ¸ãJQg6db‡:ØâÈ“ {BÌ!ý~­%Ú¾u¨|%zä¤ Øä+‡z[‘YÑ{´rè!¨ùnáHá2õÉÞ[x©´š@¹9bd1jÄ #ü‘,‚I2‰ÁZŒ\掫lL¤›äÛÑD!ð¸ïx[ì'#£@®;?ÐÃ8ÄZMDŶ庂þ˜,}Ê“]°mw¿z®5ŒáªoáÎSžÑïµ7ù$(U;ñ~2‘‰sqaHsc?MÃV=EœÜ}.„‹/]·WsÔãµ1À›Ã–™ •F._ùÒ£OÇãäjüÅHûùÎ%vÚ™$}¶8—Æ:~̈0q±ï™(_8õQƾÓgBÿ‘ÐÃrvi°}]íìOÇR l!ŽØý篗‰´U ;¿¹6ºÂ„åƒô=#׬ƒ%âÆ5tÃL÷SóÏ-E‹óé2ä•á„ ¸­#áŠÉñZV±;"”ã·ô]©~†®^ýï^~f/aáiC¹Æ«"U£«Dßîc—¨›$H€ÖtG*­†%çÐîÓOÔf ìì‰LÙ_© çóæ•Êõ}X‹[ç¡Ff âú0éö-pGÞÈQc,üí²/ éÒêÏ{ŽSÃoïÐE ÎXrÓRû¨Ôñu´½ùÙ?Äc°Ã{rT_ƒhqOx"* ?: O°„ôœ@çL[Z½ŸÙŠ’ ôŠèãé$ËE–­¬„Íu½úYD¾·"`ï¾¥Íú¼îž"%EÇd¦rÇÎø)nî{¾+?¾„L™íÁò±zâM°Ð'-¢¦4ëQ /ó5¯É秤—&\sÊXg&«_BWÑþÊþñÖ̧ú(j=ÂÑ—á™Rô‚{탳t§nŸåäù«áO€«òÒÄèÙj²¿{×8B´¿G 2¼bˆeÞæ/ F„»2‡/ÄæâB@õ.êFxBš_G¹VÛEäMŒ„:gà¨WIä'°0©õ†Š+W[¸dEtþ6õ ‰€üX*þ³båj ZñתÄ>ÿ±ÆàO©5bÅ•ª'‡c;îªä¬q‡sƒ‘C-ÕíÑYñœ'žÉ+üvST±~®í»ÁÈ… ©º‰“N6\/ª"VíïY4\k¹O-zC¦´dT¤­^LÊh¼\}+Ûô_‚e =åRLdL™YïìlîxP¥Téš}_¼†åh{# …ä·¶’fvkß“tÕb½ 2¹™‘LV¶cª#“†ªÕñiî.hyMÓw~ô½ö5JÉ;[”¯IõºÑSõæ[†òZ™§˜Y_k <ñT3¤àÖ˱Ù6ç9¡øcuÙópE–ŸRjz/çÈ‹¨ixwå·órÞ¾©ï+Å%³|b‡Ç^ØFzìÁy?ÃL±“§ñ‹ê²÷@p¬¶ÙÒPØN.<òÍæÈÄžŠPµP¼@9¯'jø[†•°o‡òÌÄçSŽ4pAwN„9+‡XÕóÐÊvîÎLìÙñýmS·&t€2Ê~ZLÅõjFÅ.î|IÄF÷èâ*Û*–¨uaö­#fÆkœ¤úDjÊ%ÉñÖp£³[â[}² î-zv{ü=k—® 4RsÜEÉöúòŒ¤°D¢;Ë¢BÒwŸñø±Ã\çÛ…ãÂz‰sŒÕÅ3£Cv-ͧ2tqcÜÎ'ö×wë=iÈ™‘íI¨‘ºáWå×&ÁÉ£|rØè:ý×?ž’W{¾|Ox'½ZÈw•ZÉŒOÅÃMäÖ®8¶JÑÃ#½ºâÎ9jx6l<_$ÉšmŸo%²É­Ø´©”Ñ “Ñh"XbUw¼uÞÂ7 8±o¿f8Õ–Ùè >Sß¾¦®ößq#ŽZ($–Õ¨·~Ê”L[n"F~zsÉÔš¸ô-½KrC þ›*Œ¬ ýXT€Ì]Ó¹`™9ƒüÀè«9ŠkBÔü ¡²<2ý`Çyœd¾V Û·z¿ÙŒéöý“8-@O¹³HÓ=Aá¼›jo¢tê2ÌR,‡Xú¬|ƒÑ¡œã ò’xÐ>5_!†{,-cª&mKÜ ¿9É Û®éð‹”p¤ü ã|LJ<9u#9û4'9Ææ„ÛtÇV©FìÜû=UDA¿ã.Û¢þ^I‹Æ×7¢I×:®Ö—¡PªþbÐ3N[³—ò…‹»2‡@°Á+Y3‡µ!--Н†Wë“b%ö»ÞÚDí½ƒ¶ÓÏ:Îé,0ñ8õ?/‰Â"ÜŠ]ÿ0x$Þç­]%åjÄÆ“Ö:-Šb¨Úê½Ü)·¢ÎI@ÿàIñއuñì©écJ$n!Ÿˆg‰ŠË`®—Ü›™)W±ÒPjȹO|³è$ùeˆ’Ýl¶GUm[S³wN-«¹ýä-üš¡³S¡ܾ:H’ ê:e ­x/Øá È÷¡TX¹†’íéÐ\ÁfÈnhù‚Ú×kœ=6Xé¨õ uz ŽÝ×ÂgeK“\„QÑÑZ·“ã ]9#×pb~þ—šÛܪ¹ªý3 ¼ƒåº8!IÁµ”Ån?‡ek¤þ{-»‰D#Œ´·ªÞkÏ!3Ý­²—(X²Ò…®ÓÐnÎÉ8Þ]7Ñ/Š\¤¾G[žäõ8‰!ß òIŸVr ά˜NƒJ ”ÎH¿XÝ­¯#kRŸ»^ wõ^Óò{¢cõB5„Ò…­ÐèêöÚݨÛ*=b¥{wµ†¶*…}2DRÓñ>æ[ J…{kÞ¡øpJ_aV)ºíš _ÊM§¤”×P´#E,­( Ñ7NäzWË9ò`UI(©Ïgú­á'<–v^ó^‰ÿÖ3~óÚv]çHÏ÷ä…¾7tšÓX}¡Œè1R_[ ­[•ðp÷Œ«iÏF1 ¯’È0(Ùi ՂႸùCâà×çå+ì¡Fá^XºE¥jJQ|2*]¸ÖŒ¤ ¤±píëÅj|Q©‘D­ø•¬ïÒЍ¢‰UQeä¶,ú¯×á·[î>ED4ÈÉÚsæ~ÇÓ›¢Š×®?¡WῚ?¬ !`aEaÓÝú-;PZ†,žwˆ¿ô;ÒBÍ>(J6íLtò²êÂ&5A·ÿú‚ÂB]g LP5`¬-/é'#!Ç)¼}Ÿ–ŠVCÓïùê/´PéœàyZ)uû Ž®ºÏǽ£•ØFiÛn·IÂøà˜8¡íaÿÙCs9à ŠúC 1¶¯Ô—ºlIÃdãN2› RÂY×Ñ™ùî,= rj;2š'nŸ§Bhf-þ7uIç^oŠ"É@›ý·™ÙÆ1â”±‚—Fï0;f—q !I[—·×P qu…Ù§X?CZºÃpžúFN–†§ í‘\âÙ½ØÜ>G1œd$iõ„Ø×3Ð÷ºÑyS‚ñ~!Û¾‚BNŒêä§šV°õ„ÝŽ|‡h®Û³ b¹´¥NÒŠ¾w—*Ǻ,5CáærB‚(®o]RJz¡ÑÏçŽkŽ®ÙâÀCEâUiãøòí&”ÛqQŸ9£ú8ËN¶?‘SäûøË »¶DÙ(™‘¨Tߪ·3|äô‰Ž'&¥YsíÍY…»¹g3Ý’w¿dÇl§?‹2AÌÝ>½.怶h&ù~mÉÝF#ïÍ#…î5W¼¯JÄ5÷Cf?s zFß^™ã` ë¼À6~¸À^KÙ%b˜PØŸáZRê%›:kÈ Æ…’ÎýJœJ †ƒg_E¯Ñ”ÜNÑj‰ô²Hm•èôzGp[;”‚v©0¤\…ß±ô:g À`‹™ÅÌ?H­oAô#2~±dìßÇi¬OÌWÕ)E:ÔR1¼ƦõÊG%¶QŸ¸Ó¬RÌç†é»jŽÃ>l{‘½%>\  «ÉŸeͳæ/³×D­TˆbuHgеxÁë”åÖmkŽ \?ý@Z0WO¹D3îÞÕeßÕMnÙ¯^=²lI}éc{Ö«z1d²‡Ê¼£TMe-úYÉš¯+«¦÷¾èz«6¡-øQ`¸gsì3lMèô#l^².ÍÊÑîÒÌ•JâL5W¤«Õ§ºûààÓGm6@ לãM×½úaŠª?¢àRõµuúcôé°Ô¶¸·9”ÙÁjïê|¾»±¤Ù.ßÎ …¸Þ5ú Ù¸$ÖêÐÜÒÒÔ(ŠîÎ cxr¾’Ý yªÛ”ÊdÞAÜZ¤(O›ÆJzˆ,ù„ãÐGИ±ÝG¸"* òÖ2òO©Ì0µ1UB̪.fjߥ#„.±\?uE¶;*_”NG#òÇ’"ê6]œ@¾ö¶›EOŽ!EÚ¯å%ÐHá·ŽdÙðGâ:ßšT÷Y fî1JÔKDF_LâN’Ë>£½\Øy)+×>õ¾¸¸zaÈË5Tpýj­Ë¤ÝèÇÛüñÅiÕ>¯ÊÎÐÙ•3sëÄK³ ·nü6uZ§ò¿ßµµÏ5hþg•0³–xyêö;>ƒR„Ö÷d…28'—q”ö ÞŽQ(4#C®òÅ@KÃ-AäÔ$‰c•¦d[HÊþ·”(7¹¦Õ+cHìŸæ R{ݾçPÛ~’I[:ibÞXî.š…ˆ›a× Áék•ŸÙÑï Â8HšÈ sJõbQóÖ¯.–Ini›² ‚OȸD‰¾ :ùMÝ>/¸41½ì«($~¸•D€D@W±!5†³Ö»PÒícõϾí?æXºcB=ÚÑÄØŽDºÙ!¹JK𹃕«ÞÕñ¥¶%)“³ŽúÓ@¿àæ¾Þd>¼]ÛÝ+b^©Åž{ê‹.ÿnò´ û,Š*€µÜèFgF~¥…°EJ||•õIzD·çÈ™kxö­~ÈS¬Z2GJA¶ ¾°è.hð Õ§;~µö‚°ææã5¬ä#)ôq^sçõPe~@ÍW"ÕÕùb’x”™†ÏBwÔ:O:¼Ê.§§½&ÚÛ”¢A3 õ¸~G«V³¬o ìú Ó=µã¨—‹®/ Ý"Ú¨ÎY—ù¥¤s?†¨>ÓZÖNP%ôo1ÑjÚ%ÝäŸ>, ÞÕ¹9¦®ŸÕ”¯ütjðÆ{mg«$#=wØ—wWHª‰ˆ”× HΠÝëµ–?‹Ú>igtÒtÎ98•á`Czüôn~_°j+?\Øe†‚¼MÚ_ñr}…F(Ûâ°žÒâÝàá¿?OŸ85ücT‰ÊŠøgüIÆmU+m7^Vì'åvȲ ÚÖ˜G‚âf6ÒÑVÉŒfuF‡ýq,½f¨03ái_ ]òVÊŒeNmçØ%žn SS.|Ø7gE¥×dN4!F„`†¼|j„ÙëÇûZŸ®ÙøóÑÂâKDyðæÞ®B Ñ­ðWýb|Æÿ%+YOZ0o]Ü_¦’®ÏÝë÷r„½—ð“E_F­ë{kI¯¼¯ÿ%¹O±:CÍÑelÍÏËð&‹ 6¬©5¨z’úÃí ÛÜØ¡èÈ.ä§ÖEq›Ý{gB¿>†L`>bG‡Î¼ý˜¼õØów¨Ÿr l«N"“q"ÑíÑmÍMo©SòÂ-:T `2ï×=̇3yo¶c¿.uÝýˆÈ?^g×uSFŠ…ëÙêáJ!?ÌJ4ÒÓ]™|&7Ì2õ»Œh™ ÍëºþÒ•4uæ‘WRD ±¾Í]›Q@ â'35/?²?µqÞáwõ×HºÐ ®Ú1vø²þ\›t)¼¢=üR¹X%à{ùýÇðæG'ì½èìØ ±ôiBfuË,KìäI:¤í¿îžÉe2Ë$Ø¡öÍšvˆªÚ‹»‘W$µv‹åEQPm¶³êvP²èGçèÉT îÌ‹Yf$"’TÝ"?Ž›fѸŒ•Èê쯎=65öÔŒG(ÏÆw×bæmŠ Š.鶉4a;J|VÛÇ×háø`¢Þ[Ò¿ñ=¬Kè<{… =ó&3 –iÙ¢3!0u$tvBöÌÜÿ½Üät_,´F‰÷ÔÛ{1R™!X]UÛ„›åz¸½DÏæïÐÜ?@åuÔ¡àaèòi»× 9f JX®X¯Ã£Þ oà­i¨±"8#K„âº{O\^V± ä°¥àJ¦ÆMuŠ|—ïq1 Båœê¸”IÄÑÑÄo‰Ãut>À`aÿp‹u¸bw¢o÷¹½Gx‚+½b§¥zKЧöÆâÃF@™H¯‰ΪrP¶4iJKhª-›W§HùPò3à ÉÉö$Wë€ø=›Á›§­­J­£HÕ_Ýa3¦ô÷Øa±Fô”_)ûÓ4Üß%2Èõ*äzªÆ%ŽÞ£Y f}«>H"åEêŠF ¶Ó¢Ùƒ2Å8†Ö.73Åý¬ÑHˆ8bg.ᯰ•pψΗ‹¼†Ò>#%Äe„šÒ‘¿¾}µj©rÍ£èÑ2Њ"R6E¢= †4X¼Ë‚ZëCÕÛ›Iro2¸gÖ}m£2æoÙ+hVŸ¢“„ï\! .š"cé¹lréÛ¦cêà%(Sð„«1‹ »%ä£ ±úC“â~Ñ1ZHË ÅCwg. s‚>¤w¾Ïùõ`T0éHCQ=rˆ¸M±¤9Àüíy(M”à¹N>wK®ÖBñ[9¡Éô½¼&â 6ÙÞyðlžoqê = ‘-÷øÏõ!Rãûb’Ã\‚uD®J]›¤Š1.K©dïjÕ ˜v»•0´ä\ûF9ºõÛ&§fD9XEý)*Qd>ëœõ²+¬"jçÆqŸÐô½oíœF $3ãÔÓá~|¬¯@´”+¹0áÓG¤Ë-µ}+´ é èpØÒŠAõ\ž£¯I-­Bmœ~jêEÃ˰¯zâÝç8ƈ£0Ï™‰¾ÇP·»þèPŽE}8oÿä_{O²mÝH­á@¯ÕÔè’3½Z¡l7É/¤÷ñ–º†T¬Ä߆Óê÷ieüvÚibõØ8u;aBÍöÏÁÿ0¹’ŒRË,ëu<‡˜,·ñ e{Ôðˆ<­ôŠÞ]ª)ó ,)d¡¿WÏRU³«òÁ]½¿I€‹%NÎ@"x¹ÙÓm§f²÷Hë~“syÕ‘{:Ö½Æ2˜Š¶Ûø5Ý®{sg.*h)¤üexžæ¥¬§ÞÝ{70i™“ì¡i¥$€n´¡ðÔU±*fÖÎy‹žºZ=û&“Õ›W.©bI yGï#-a`˜:³RôÎó¢ŽçuÑe?ünP÷À$>]eõ%ÄŽ•siá¼±Y>gJòà¦õÉ"ZeNœŸˆ¼©”Ç\µ:@i€Ç ßH.FR^¨Ae,miwÓdÉg³(”Õ%ÂègvÊö^äfø¦õ£Oã@ ðð ’¢—.ÁÁo3©ˆuÂ_9–grºe8¦0³PC#†¤*Û³‰•ˆ—ëÇp¦˜šì]ˆ›KÖõ%ݬD¾=#üîB %6Žº–š¬—î«ÆÏµl ¥JW8]¯‘Î׉$õÄ…Nx¥“k=·Þ£7EáÕáH©I¯m|ÌêßbômÈ&iŸBÚ4ÙVà !`à¸çØ.2yâ®@Áb/ò7Â|Ûh~_O¸ô.»Åq¿^ŽåäîuÐØkþ‚yY¸!½–tòXAc¹NX”.ÇŽ 4öYšÓ ¤|zìÃE3…2-Hýdw2¼n'"m}Àn¦™Î¯æ 2Gt…Óš­ˆ°m©ÍbÉ®ô>£w-©Ó†Þ¡¸ºý(;Á+@O*ÿ–¥+-t³5ö³‚” !‹]7jE51´‡)YÒÄû][/&Ÿè7m\üùùëYR…ût–£¶<ùïÕ¹$n†¸q3y¡èe‹‚$©UMÑÃ…&ïƒÙ©Vwûâeûn‡ë=ü¹èfú¡ã²É%ŸYê7¶¥¿)G¼^ê"òžÍ¡¢ö‡öÎKY…Ê1eKí h„ÂÜÆ²ƒ=Š“—`y™VxŒrÃÙ¼/¿ÐÌF7Z9“®ÿ…´Ð‹K¿7‘nDK¨ÂUtì;'f›–»ÌÇ3 ¬7ËO­sùž7Á„BS²±ÚbȰ°X+ó¨ìüŽéüK÷!rwlWTϳ|6w©&0Bz7êùñ7Ã3»A ÄÛláa_E3Q­YñÅÀ¾zºêh[ùCL¼@C§c¸Y*žN¯ZÏÔÝŠ™unŸVc>ë}-¬ÒCé†j;ÌôìòGâLߣ÷tÃU7ž!Vµ ÙÛšöB´¸Š+Ñ©þšÉÂ$ÂÉ Q.é⎴›½=×/Š“eM¤x„²qÜà7C€¦vçÔ…ÀX“¾ƒë›<ú œH_ÍhâvíâUë‘™§5vŠNòCê4Åô`ÍÚyI¬KB /=V,«|seA}J1çfáâéV)VlG?›IÔÕ9ÅDñÞU’ã•öfbk-aÖHÎÒuê šNCB¥lÛ êC<ÃÈtÕè Iú'9‰ÞIa±±ÚŽÌ÷t>\ABž²ƒ"i>Tͼ!·x5IxsiËBsË©·¨é:Yˆ\TñMc[U“µJ‰¶-ËX«n“Ë'Vì;´%üÎÐß{{—Žš¿å¿û`õ¸•½±u#ø-(¼*wíQáÜîG£XíiÜ$ÚèmTƒ ëvî-M}`À@+ꣀ•‹Løh†zÐŒu\>Ú5&¨?çB÷{Ë3ÏÃÞì·SãX6oÅ|=~?¾¬7N§#)«óskmúœ¼[°ÊL?4yÏѲêLìÒPci}Ú~6î ^ò̶ËZý°yà;a‰NÐ[Öoò5«K‘–èwz¬õS«Q: ´]œßújuÀ’wœw'…u3q3u†rP¹åEëÆ¼x}­#ƒü6s»ÈáR£r®Y&š»DòÉ`â:ærî^Î96žüˆ6ŽHV2hSK%t«%»Ö7¾y£Ç­~ætÎÅHUÑ”ÎâZq͆p¯Ìuµð½~¦0ùvÈá—½ýír‡éSóª––¤ªu"îÓ®”S2¿³ÆsëGU|©BñÉ\8‰ˆaRã ¸©`A-ÿ,x-å⬹…ô[Äós'ñ:…äoÈüȵ~‡b(?„ÃhÏô“Èą́²ËŽI–.¡jÉxŒš acì¶9ú+ bý²ôJ¸Ö„bÛP!ží¤cGŠ’8.9¹bEòù7Ø5÷Ô¯){+@/W ÕÈ_(‘Ò¤{YáÅÉ™€µÄ·QVƳø©'ê ú 6 Ñ]3/¢—779Ák:n³J_t,°Ê„Xô bÂ…öre)K3·xi'Ê%M¬9}¶Ôe-ªG5ò>^¼eœùPå: …ŠÿˆšË™§ò‹ä°¨{M15BúËÐNÉUЄ!¤-»qÚŸjtó“UtžX„Ÿì¥Ö×' ÌØ£íg^º¦5Ü#¼[Csv× ÕìQ^¢ïóõ+Aú" ?¥ñ0€mB§]güßǵ 0k9?ªÃ–ÅY}~hÎpáž$Už±fEh‹ŒÛºÄ¹¿én¿Û?téðdAÇ=±Žsü#B3ê²I³É&o3T!ì¹o—;"8t·Ø& ñªa*L±{ÒaDÑ ûÅ2†ôQloc¹¥GÇFîCŒ<¼Ü|kxx|ÉšÀ.ßÄbT…~» ÙOµ WÞžÒ‡-ÏÈ$‹îï_æE ª£ #™ÐùÉ¢t/§Rd)Çiý ˆ¥±ê8©Dçõ·‘ì¾ÔÖBa¯¯%|R¨„]«´–M|¼îT×ë^þ9Gc'8O…?{›.PôyHRZPƒF5ý„.ÄøzYOñô}žRÕÎCó»ì‡Pñwì'ŒÞ½ftUÝvl¼ã$11ÎõêŽÞ¿5oщ=ºç×~‚ø!=dŽÉ_ÚÞµˆ”+I8I‹XZåÆK”÷®ÌûP¾¦y&Ž’MJäªwÈ5q+Ö°ò¬"íPÑKêý8´˜óü—©-)ÄÇ·®¶íQ+ÒcŒ ØQ9»‹¸N;°p¿º®—é°xæ9ыҨ÷´WQ°qyŽ^'ħáNæ‚’ OÅep(üEL”<ÇO@⯖x#p-Ð>炆S㣎=U 'a)y59¹Ç¼8ƒÐp^Ý­j_p(æÆ½(O3ïûXÕRUÔ"ØT÷¿Þ}¯Õ xvuþuì˜Z®Oÿ15±•2<Ìæä6s¢1™Wqw:è Ðxâ² »šÕ¯H',E„À‘!Q÷.Vo¨mò2Žsr&XB8޳ÐçÜ#Únåqex6ªÔÎ~eáºg—\Ï µ-€×°ž«BЙ ¢ušô°&yWµ=cÞê»ÞÌIª•Æ[Ç—I›YÊL&éDUË`õð2Æ]¯Ç𠕏’H¶|xxù‚ÝùÍ^¯®8[O®›ë=× 1ãBa[¸Yi™&ZB®1dÜQ á‚]ê›b¡‘ž¶$íQ¾R@kÿ¥kmàý§ ÙjüŠhg—Zéuº{…#jÂu¤ŒYЫº¥-Žç #Î7¯àAŒÌ8:‰Ì™›Ù›Üwºï˜š8ù”{QÏDÖïQ´ü‘="4p_Y¦!E>³Fîx.úï»Ó÷Žá­±JÈÇ4%Ù\AÄŒ|ÞµM©Ó1À¦XÃòHä¬eS­!/"a’†7>\ ¹Vhø¤Zºàìz/úõ § Óõ½¤ÈÎÜ T胨óþu zà…¿ìg4]äÀ¾l}…~„—MV•:éÅLƒ`|›×=P|ÂRM,Ü#{ª7Ý;ßÄa}ç;òÏJYÛ›ÎeÅÜvX$Kpd‚ìß§y§ ãÝU%/´¤kóò®.wäIà³ð7bÃ-o?\’Á$OG:h$ºJ$ÞD¶Aqlï °‰ôkŠ¢æ2ø¦ñŒI,«n‚Ód€¾Ð_ývÄÆ¦à¹±qêâñ“»àÛ _BŠ}ÏH·JG(t+é |2%añ3þ§£ÒoMªúP|²‹æ Åû{'UŽ­ã«kIÜjñô9¼© a)ƒT1MÔgQŒEæó¶Ÿ3úŠf8d¿‚>\.0W0Ìz•-ª5«„?áÖKNJ¶DÕ䨹´æ‹ ÏÛõHJó?¥ït¨FOéÕšíu F“¡Sá÷Ø7›ìC‘TW„íY1¼€?Fµj l0 6¶=¥g 4U×R]üæšBÄŠ0Š÷ª8$}Š;µ7TœdgH؇4DòÞë²PÛ'F•:°P¨x¿íœå]nÆF3áççoT¸:ÊÃpWÛvSÛHÆ[g>Õy" žˆiªqÏ}S ¾T”âSÛÝúr2Š*¯clÀn-/rúhi‚ûjµMÙÛd Oi¨í)ˆÀÄÈÙW”ÁÙ ´¾ãŽìÅ^Œ— ŽœÎx«¸ÎTuF7îß9°*-›AÊ9ö¾š÷XŸå|ä+Ö=ÖAøW(A4¤ºJFüÒsÊ@àÎS ù6›ØïKjÑSÎæ6h5T²ò`¬†îWe¢X9u¢+;Ý»õkß/Í LQâU¤‰´ÊQ!Ç',™Æ, 2‘.J¸jnm@›ÛuÔ€Ž¸$ý…ÆCÜ¡Pô¼O=4# ùs ­Š©QHg#$üí È:m›ª?ΣÕzO㶇Ÿí1þCƒ·cnöýtÓgÞÏõôsJ©î±91,MçÜ‚g𣋌&¼„{Ú t¯!Ŧ6éÛ5õ®ütß:at<(Ü乬 ·ËÇf–‡…Ó•u°ºàÙê²£ï%öÃÅŸRI.Ùš¿–r÷p° ¸Ä ™/ô Fó©–$ó¯~6„åd1´iæ™-º6 ÓÕiÔ#ñÍð~·$»ÊJZ¸ ho$í–FÀ!¸@/ýêŸÕ%ï™- báCÑc‡ Ù™„JŸ–®’7a2d¨’¦CKÁy—qd-ºààŠ|n7Ë/{³­@[)Wç‘ü…Ì7ÚR)ÞJøªJ!ùƒ…¯1ÿá5û‡Î"ý€ÜúÀ<îºXÖüE“Þiæ€6ͯ#_H#¯F:¢©CDÊnæÆ„-úhûv1åÑÐhb¶qÄŽ|aÎîó,RxÍ–"c$èû%*'ËÊ-c=nn»eÜËÍ £™fXhyb!xdàˆAd2”ß#’§%VÆÖMLö›jOfêZᬡw<½h˜ã§¥ž:w2Z‘ºwjá©<´¿V ©9cj6ûwñ™ã†­÷Œé·aqþXE!Ziø„§.·&˜±ñæfؤ[4W¨R‚&—æSjí’M»¹IywæÓí.Læ¼;•†È³ÍÕvHŽÄ™y@ߌØ_Wf£ÅÖÖ¿zÈ;rîWK í1ÔÚîëiB)Ç+FKF¦Á¤/¥ YbÏ«Ñø™®¾_8PÏÑ?ùU¼ #ÇåøKÝ lãÒ¸x> ÏÌ!31åÐë˜þhwbÚ:AØ ßUŒ@§É\Ø í¥T#Ðn£H^È.º¢«²ò®…2¤6ÉÔ¡/ëX¿ª‡ró¨8n®PCŒÿREe3‚H7f§`ÿå¹ðø_õµµ¿€d˜Kp×V±ç6Œr¦š¥MÄ­îk‡œC·øY”%æõÑ{Ò'ÅŒžÕ  *½.l4e6O&Øóa&/ty{ e{€9¬)iYM4Y†¿[؃ôRÈ©Cð6bÀ»üal!¡å\éþ w}³M¼ÂAÁcCÔr=º 1‘ìø Aè‹V¥´p¦˜"~A2ß)” ¥_*EC³ÜA0ýó»SYhóÒK©I/¶ˆ91T¢,")ƒâÀ{ "õðKÂ9‘8¼ü@W¨bÔgÓ‡CzE=kcÆâgb¡ÆC׸{tÙZò ÿü7½XºS:ÖUl¾ì+îŽGK¤SSQYaTÀ$bɼ çMñŠR‰Ä”ÜÓgx¥š ÚÄPEd&ý\!üjŸ±EÞËNáÓr]SÌ€ÉaÑÂR÷ñàGÅÒ¡W ©Ýæ¹èE¼0lˆ<«ü°“…ááp£T¦ËÖÇúWrÑÜz”³Í{¯š—U>·&ñ¯-mÕ!X9Ý›cΚ¶ƒÛÇýIÆýÈiy47B¡•xe"-@IN—Ã\WÔÞÄõä>îÔ,dä_±)çÛd¨Áú@Þ( Qp¤Q#â¬^³m~~¶sw›S¦þXUŸ¶wB'J­ŠÅÀRXZó »‘!wNëT‰Æ—Ÿ-Pr;€ð¢‡ˆiM ø¤Ÿ®ü*ƒõ?Øi¡{.r³Â(ÍóØ ˆ¬V­YNæ-G“ìÉë±ß¯ô‡ž4ÊH«»U÷£¤è e9þ8z{Îý¸ò¹:,ÇÆH‰„é–UReVÜWÛ‚v“¡ë;­ÀSÿ¹löÔu¬ûhpûñ zzI6éÇÐïD%_’ûû½¬oQ7i ðI4¦yTŠ¿1 ½í­Nëq)ê¨G–,=9f›ý™Dý%\—Ë*4ç„j7ñàm!Îì'Z’/tÙ”ÇËFWˆ ã™dW*•™jñ0½ú¹B/ïéÇjÍ>6 k¦@5äsIKò» lL¨yÎû&pœlô*2Î'g³òåB§'VŠ…] oŠ ä"l_Õ¸›qÀ¯Jzïç˜!!D6ýÓúrQÈÔjC¹i“&œœcµçþ‹ª‹¥cªhJlÌ›fÜo¿°öÍ{ýá:GrQE˜PßwÌx‡W›[ïÈŠ6õ¬À ¦Á;iiGøºËá jg!1õ“oÚ ^oü4jÿQ³ð,fÃxwpbÊRâd6|ªãVT–¨à›Ó‡#C9½ìõ¸w5ÜÿQ®þàB»¡%Û[ؾ$hìhÚ=›ÿ«/‰iæ7캡—OâÇÓB{ÿ§°:{ð¿Â}/B[ÔÉe>'Hq3ìüû¿y qƒò¶äÈÒ—ívùûÔ=M¦†¤á $À9æû›”DjŸùÂ< 情`×J9 Ög Ĥ}8BPïbÌ«ÆêVIEº€ô¾[=Î$ëcl„‡kei:bkå/V¸Mû™ŒBü,_ÉsÕüm¿XöúýkçÒöŠcdN4ÜæwåÀê½[wY€‘ÖM¬U¯/c Ý­øPì˜õ‡/†!=¸Ýë¶Ýžô}¨-Kïvœ¼Óâ'Òöä –KÒ‚¶£m’½wÎb9X«©†¿KKKE‚ë˜{¿¬¬õGdû—…¤:Zö°œ‰÷¦E³æQ –e³¶ƒ1¦ õǼ,âb<%ÔÅʆô@É­ä endstream endobj 1226 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xÚwT”[Û6R"ÀC7 ‚¤tw0À3À ]Ò ¡Ò©H(%]Ò " %!ÒÝ)~cœsÞóþÿZß·f­gž}ß×]{_×^ëaaÐÖ㑵ƒÛ@”à0$?/H×ÐÓã /$€Ç¢Eº@þ²ã±B<P8Lâ?ò0eS#Q@ 8 Põtø~ ~Q ÄÿÂ=$°ÔÐàTá0EîæëupD¢êüõ °Ûrüââ¢Ü¿ÂYWˆÔ 4ÀHGˆ+ª¢-ØЃÛB!Hߥ`—rD"Ý$øø¼½½yÁ®^¸‡ƒ47à E:ºÄà büлBþŒÆ‹Çè;B¿zp{¤7Ø  .P[ ñ„ÙA<Tu@OEÐrƒÀ~ƒÕ¸?›ðóòÿîOôÏDPد`°­-ÜÕ ó…Â{¨ ÐRRçEú ¹0Ìî'ì‚€£âÁ^`¨ ØøÕ:P’ÕÀ¨ ÿ̇°õ€º!¼¨ËÏù~¦Am³"ÌNîê !x?ûS€z@lQûîË÷çpapo˜ÿ_+{(ÌÎþçvžn|0¨»'DEáeÂûÇæA H $@܈­#ßÏú¾n_NþŸfÔ þnp7À5$jAýáù#À^éá ôÿOÇ¿Wxüü€Ô Ø@ 0¼²£ÌûßkÔù{@}3Š~üèçïï7 Ãìà0ß࿎˜OIÉDÍXëÏÈ;åäà>€??À# ÄÅÅQaq ðßi´ÁÐ?müG¨ ̈ÿîµMuìõ‡ìôÁü;—&E\ÀþÏÍA [ÔƒÿÿÌö_!ÿ?’ÿÌò¿òü¿;Ròtqùågÿ øü`W¨‹ïЏžH”4à()Àþjù­\ ˆÔÓõ¿½*H0J ²0—¿7ŠP‚ú@ì´¡H[Çß|ùm7ø©4( ¢ G@Þ-?ô_>”¼lQ÷EÊ_.J=ÿ.©³…Ûý”™€°öðûâP\üùQz´ƒøü¢1ÀÇ ƒ#Q!j¼@Àî÷óL…@Ÿê€¹@ì‘?]¿­ü¬¿Ïï§ù_Um==PNä/f ZúkýKéˆÄojn+îTÞrV)Kãͳü{~±5æ‰IO´0’õsž¿£úÍŒ£îrÖve”©Ú“%‘#4œ;gC>æY!s)ʹH4Åž%¹=žüþóÜÚá£hjÌÒíÝDZ"k3L3¶$£‰«ÑNÁÕò•‚ï­ˆUSñMÀ(:e1wˆbå¾5bsc¶E·|–1Xx n î9½0cäjkçX/®¬b9YX£ÅšïàFÍi±}xñªˆp2ú ZíHTE-Ç͵8ó×Ìoù1õ!Ï G¹0g¯§ûº¶<-NxåÏç}:„lIÖ ŽEcºíÈ&s°Xs…ôA$ù½‰ŒqV]6í“ß6ÛΪ3ô‹«okb.„YÑãØnCZÝS÷hÍåÕßõ9iMýèæXùàè{Ó#”+»Å=ÿ O£"”p¥RªñMêÀú„ÓG¥Ù4®s·AÃIÎÝêë·zÒ ¶[&ä›^Ð-ñpµzš^ó¬&ë±3c\ÑiìŸ'%m=ño‘D+¬Ek{Uí¤Z\³æ¼ýŠó¥]ˆ„ž³K-b4'0X·°ý—zÿ#”ÆëýŒëºá¬‰­S:Q¯Ÿ·ÌqË‹ Pàngðì ’"eS?)<äš%C2ÕM@GÖH-Ü]ôD„´Æ)מjZF!ë&g¥ˆßãNHÝ‘kÆN¸4ŽdRydÚ2Mº“Êæ‰…}YçíkËâ ¢1štÖmbé#M½pš ôGÕ£æ9L Ó¸^ä‰Ã˜iº€fñÔ‡G¾¿ðÇÈz%æ`læ¼G³L{?Ñïu·ÊŒ~ëdúÙ·–Ü›Z*£ C½ù}¯C˜åe0±#¡Ážü–OÌ\é¶²–LGùnKRÛMáz~9ei#åæ¶¡hÏŸ|sa£ë>Æ9Ý¡ƒýÕ¦š°ºFÇ–«Ö´ûêËõ` ×r6el:&có³Ð’ùeÇS …Õ×öóˆù‡@Ù%µý…†Ó±ÉÐiGÉæH­C bÒÀø†Ø/×V½¹ÇD»~"‘ÆJ]“ƒVMªÁ¡ë¥$Q& ¤Xs»Wc ?J#íO¹õŠYj1šÛ¯ÅûŽžÁM©:¾¨éÕ'½Œ©u+¼EÆw"&¦¥õLB¦°–sÓÜ š0ݰ>$–Ï+jÀôDkÖ¡·)Ù)O*É®ð©øZ¯‡Žb19Èä+C‘ôôº¬¢îÕëoDXïÜîF̽žGsVíß°¥  Ú}¦G¶ôüùÐù«jÙd«"ÒL^÷äWÎÚW¸í/.ZiØð¬!M£9ÞÛÎ…îŸäMd[Ö®@©»Ë&sb}AäpP9ÛŠßM,šIΕÌSs§KJ;wØù!\Ž#-Óý)%tiépüFTÀ'݃@f & %Ì^¿nõ×›Wµ.ï›rŸÒÎv>K]7µ›$e%: :”…fàÓSnÚô“ÌT§¥¿¬ƒQ}´˜i—ÖŽ L˱k«¥z]#7 êœñ™û{AÓ"º¬ éÙlû‚ôì8û1`î÷Ú—Ûä†ÞÓ >&ðØ~ôæÊ„Û¡ÔÛei*Pƒ’ƒZÌqÕ *E€y” úF(ÖÖÔAš>ï+¡„ufÈjÝ\µôi¡{[—¼ï ,—ÑŒk¿œêÍ;GS'»AGçÁ‘)] ¾ê'Ò¶W2Ôªìš'(žlºã- {w“f4Ë Çž$1_N ÷aèŒå*å®`ÂÆßXwíMaÔ4!†d8Šd“GZÎò 'Åmuž&ÈâG‘% 9N‹pµ6~jõR§Ñ•\žÎå‰Â˜J›h^å£S›ŽˆpäÓÞé&Sˆ•*ã>_#ñ¼Ò%Ӽタ¼ŠÐJM¼­é[ñþ@(“ÒÈL¤3ŠîÎMhæÖÞÆcăÓ;?’#ž&¾$óèO3üyäjí!ýòXŒÆPoðᡘ¿èÝ×C†[<ƒy¸–§g^!ùiŸlå3‹%ìPšù>Fèiß7Üì ~®bæÊ©»³°–>ogNwãëv§Œq<Öîj|ô©‚É+‚šO²•ëÌ=Uï v&c'ÚçêÅ€{œ]Kg<‘¯9’¬4×Þõ-h±9)>i³'ÒÌÚÀN/4þ5)Pp°üeßXQ—~Gb¹wØ”µÝì1•g•?Z©G…Qê'K~.YNöab>Ž#|XñˆÍ¤ºô᲎o7ñ9W……ª©bq× ØGÃV¸Év$uW?¶s‡qYþö›|uR™È‘ŸOõqø!‰›ïˆÒ»kÑ܈x‡~Ç?<ÖÙO+ê¯^„3íß¾ì¾ÁÉ-¢FÜãæðDæ“æ DB6I}±dNé«oÒ‰§ñáfm[62Êõ—D°˜¡¹fÿ2K—T‡zBLe/<Ɔc{òå Ù)Š!EaèÖaÿ:ÕÛ7Í[xVÏaXƒ{™ Õ[U,¯'Ð ý"´Ÿ’MÒ*¼hI^v7ež2uPgÛd!ì¾Uî•#«y×)ó¼ƒQz¹U6Ú7÷¤’â9¥‹/ñ¼^ÞÇ(K88ýÔç-¨sûÕAÉYav‚¾Þ^5õ`QnW†ƒ-eA·Úh»?ñG%.È]š¡—SÈÕ _â‹À9s½nß' À?=s(˜o¼@Ó⡲ôG¯e›¬iˆcK4“ª8H«!eg3‰ Æ»n.‹¨¾ÄÓiês»°ñÉ5Aì2¹¸×{Ö±õó¾]æ­Á—µS_•6«³ûSõÌâÕ¹ צ—\ÊøEùÏåÍÌ«X„g#|_s¬-ïÜ2¥1g Qºf^äë&O•¡Ž»—>Oí¬6ÍBß2ß×µüîê÷úȺÌí¢¦ŸXpÖÆ<Æ»Q»jØ$]’ÚšøY$k'?âßÉtWtymшÀPšî4=±=v|8ìZgq1~¿Îy¢.5ñžËÝm/ p´š”îUõÛxl³á: Y•¸E²êè»d ›´äª†¶1ã÷ŽÉΑkr0Føð ÀmýUÏ¢JÞðÙ»ä>Å•8œ0AC¨Ía,ˆ*›à}lÿUŠ0ý¾€SX&\Žš•”ÃTss#œò-=µ{ûª,^cR2ÒËÁ‚â©àÇè2í…yø;} 7t¿¬o¤Q¥„%æÙ€]Ú¶š0†TÅœ‹ U†™­ûx1)êvCF ÆMǘNñ2H'È»d«¥È™·K2‹N™NºS‚ŒªóM¥ÊI-gˆqˆ ®·óù"8hwàÁTgeù ¥”äO–¯Zí 7 Ò!•ªy¨·ÑB¨C´&‡¬æ™̸,l°Ç—†¥ÛwW"ã•mJ7éáuY*_„2 ×V#ïHò›%–#Ô- ’®¿µu~¥Ù1Ó_érb*s roûFæ@cËU\Ê?‘ ÷„§*ÇËÅ0<¥N#à­»#¾zŸ+úË„ƒ&žÅ1ê‚?PI‰ñó‰×Ì”Do³;ïMƒ7z°ñažþOÝ(Ã= Ÿ¼×iërwÙ°Ÿ²wz ÒÀ1Ax÷‹Ï·øÛ ÷Þ¾˜Q™äN½¼=h{ÆkSx‘ã·ííFڌ޸ÜÀŸC;ßõØ“J±H_¹µ§¸†§µ“‡a 4 äôŒå&ï»qºöÄùð*ÞéÊ;µÐºÌöÖ‘åü†£j³Õt“#ùcŠÎ­ÐYYsg©Íâ£2I/¨ˆZýeDñY„ˆ3/—Þ¼¼­¿QôíAók‰§d4ØäuK’|{•údp¤:4­º&–ç¸h.[²§”×áMÞ²@FâîQ´4Ùø=®3PK¿Š–ß0z/Ò$‡ús’ò8&¯Ež 5ýbAC—J³gŠZÈÉ9Óáœt«h³Á¤~‹ó³Ïµ¡¡…¤G¦.Vþì”F•ûaÐ|£Á[2‹ wMM–Óú¥åÆ-dú7Å3CæÔªS­Hî,ºD²÷‹QÆoKÓǪçÇ»Êì˜Ji¯u®¾K÷'Ff…niÒÞSðï‚ÕJÊß1%OI×<‘-/âkzbåk{ý¾û®2œë g›ï=¬«·ÅéPLAÊ–ÁNA ¢ÀÑc!ß7Üà;Hsê3t^9-'!±ªÀë Ø9)¨èX÷:³;×;,ÝúI}\òÕ¦ù¤ÓÔ¶Et‰öáÔiß v*µÍ•ô>7¦NÒ¶C,fß[Å•„Ç ½!Ü+E]”Ä׿èŦ³@mX¡Fu¤­±vOG˜>ć§bÄÛ«á\æ[Ä-aê#ÉݶG.¹gÌæx;Ç›¥7SK³²U¸ŸÅ)Õóq†|†\ÓK:™¢Í/Ëcñ‘:Q‘˜$õºÆÑHI®Ú{œËîwêžÙ?„d«zjµÚl™toîc~=pt>p)UDç,ç~óãÅQg4&H'÷žxPnkù1ï~þõƒŽäµDÂ!t:j8ç²tśΪ¹‰J;Ãt徯Aœ¦cP Æ´=}<‡6ÏO ³¿ßÜŒ~wÊÇÍ%Ëd1¦wªŠ{„oÌÆ®ÿÆM÷f̤´¥F¸îyÊÄÒûUXÈ+ƒZyánüÜ|³È2ù¨Î·Ä±Þ4ç<«¹V9"®ÃV^ÙéYÏ Õ^©ë½­'‰räz>©ÔδÔö¢Aº%¬–Þ‘óÓ1óÓÍ‚!QŠ_ÊDH½Ž^äKëŽ$]—ÀÙ’œ]Þ÷> ZWöÀWÍŽ żè^ Óú,!°”c–å(<êþ`‰¼÷“ 5 ©¼“¦¢ûÀGñnEÎŒ:×ö˜S7CíS™ŠéR%<¥äܵÓü«••ÉK.{˲0÷ z¾ÍÌxÞ» "ià"h{˜ë¾ýfÞ£-h©TŒ Áí£ ¥I>–o²ƒÈÞ9jͤ€úÓSÇŧ—dcX~­Uk²?of¬-½Ávˆ»Â£Ã1~9³0?YÂ.žyÖ$­àQÌŸ¸B⪥ÁtˆzÇ~1¢ÐóÆ?Lj£ÛÚ¬Ö;Y¿ùòݸ2›ºª¤ž y†@6ãg‘Ûã`»¡6¹BóoÃß `geØbÓl¾ÊõÑõþK Õ·jvL [̤8Årܼ˜eáÙ œO V¥‰3‘꺣‹˜bóÁs5Jwú²ñdóùvc2B7*ð6ψ HjÍ{ã—Þ€)¬ÜÆÜ;zÈÝByt…Þ^_ôƒ^N°A9H¤ˆ~šÙõøCȳòQXe.¡øKΕº!÷¾oÓñgíaAf+¬ï^œû²³‡»¯*hÑ(>Ñ;í º˜ú›XÊ2 i?»ã9ÂRϺc;`¬v™0Aç¹|{§{¨PŒà ±òÕޣב‰š–}ß@Š,Té_‡Œ« R¥õZÅ ÍZ•±[ó—fŒrr®*RG {¦˜‹5ª; ”‚&_Ðô&È;Û?.`³âÆà‚OÐ^„jêã »Yàâ3|0ÂVø‚]Md[¥SŒ>‘]ÛÝk$ÖàiíQ4/.ì[Ôµ[Ÿrkù¢¶bßW¾¢eÔ=©·¨¶%ÒÙî-‘YÕf×PŒ…0õ”Ôó`?êš¼ÇÚÊ̜ީc—å~YÕÊDH]5™·ó ÞTYœÈ‘¤Êª3ÉB©o#ô¡ŸN—QyÂä–ÙH]ô„^‰È÷iËøçûÖò[[\ñdÙ”>q…]òPÈ>¤¼ûãÍ÷>U—tDñ‹0%þFM™4€¢KÍ' Ça幃Þ`ø¡t«´û|ÁóýIÍ3_wåó^ãx:|»,°=¨s°ô²Çêîæ^³ÞµE…è]ÓŽ±Éµ ËVÂ3¢Ù'âõhgç¡ÃG‹Ì6LtÈvbõigo¢Uãn¤ œ*ôÞ¤;†ÃȾF¯zâGùç=h­"I×c2±©’…QØ–ÍÂôÈœÇ ŒÙð÷úŠã5îÇàÍçã6£NÛ[L–ÅŽ—:‰—ÞÛÇGoö çkarj.Ÿt"·Ô´MÞœc·qéTZ7†u»|ç³bï2KëêЗ;mËC^’ñúI|Ç>HãU•xÆÒŒ}ÃQÏ%ò󈔗ӾÇʨ-zc%•ßþæËÛ\+”KÍÛKa5í†Å2ý&É·¸Nå#ÌŸ­E<U®B}·­1T÷*/û©—5 >6#†pvŠ›wªÃ5ÃLŸËsúo˜}‹PŸ˜Æêp¶±;Wà5T?ox|ÿýÇâ8…‡» _ºâ#`£³#‡ãï§,õŒÄÂC¶'«GlGüa®Ô]%ô£Ð·²aûñä^ÝøÍ…òä—:Là#& fþé—ûúRcR[– c¾ÝÝÜGLÏ\üu+¬'êÅaø§¦þN„z¦oEk#Ìøz-ên„Ö;ØX ¢€H‰¸µDmú@¾ƒKºÍ¿cŒðÙó3‘¹ú‰(‘Rýç˜"ÒγqööÅKéÕXW$E˯öˈqœÌ‚¡>vÉqr¿ŸöçTX5zSò†FZ}²®ýÚÕ™ø endstream endobj 1228 0 obj << /Length1 1724 /Length2 8131 /Length3 0 /Length 9264 /Filter /FlateDecode >> stream xÚ¸TÓï?ŽHK§¤éî”–n$%Ç0ŒÑ%ÝÝ!HwIH£¤t  Ò-) ‚þ¦Ÿþþÿçü~gçlïçu_÷>÷>÷uŸíŒ…Q÷ ¼-ܬ ‡!yxù%ŠZOLøüüB¼üü‚x,,$üŽÇbF¸Aà0É1` …="QD-8  îD%Ä$ùù‚üüáIÀc Ä Å P‡ÃÀnx,ŠpoÄÞ‰Úç¯G;ˆ !!ÆýÛ ï F@@@@ ˆt;£v¡€'pŒôþOöGH¤‹$Ÿ§§'/ÐÙް—áàxB}°á¶ü*  tÿY/ ÀÀâö‡á Üé D€( an(w˜-@íx¢¦ ÐqÃþ kþAàüy8^¿Ãýéý+öÛÁ]€0oÌ`‚:Êš¼H/$7³ýEBÝà( Ú ¿S”åõ@T…ÖçB@\n¼nè¯ù~…A³ÌVîì †!Ýð~å÷‚ƒPçîÍ÷gs`pO˜ï_+;ÌÖîW¶î.|†0ˆ«;XíñŸ„÷fFDø%DEE`WØ äÀ÷koðoãoUƒ¿¯ Ü`‡*ì±£>ð|Ý€`áö÷ý·á¿+<€-„Ø€í!0¼¢£`°ÝkTÿ/€?J~þ_¯¿Ÿ,P ³…àÞÿз˜OE[KSIŸëÏ’ÿ6*(À½¾<‚ Q~€€€€(@LLàÿß8º@ÈŸyüËW fHü‘.êœþJÙãO °ÿ9 €ÿÆÒ†£” °ÿ#ts~~êMàÿYî¿]þÿTþ+ÊÿUèÿ›‘²;úÛÎþáÿc:C Þ2PÊuG¢¦@ ŽšØÿRÁŒ®Øâîü¿V5$5 ò0{”¢y„yù…ÿÀ!nÊ/°­. røC5à†¿æ uán_7 Ê‹Ÿÿl¨!9¡n7”4›À¨úï¾J0Üö×° Šˆ€ÐÕkÔJà+€šJ[°×o1øxap$Ê€ªÑ`Gàýj¬ €èâ‚€{]ÝQM@ãÂ(€{ÚÚ@ÿèä_~QŸ ñ/@ € 0l÷ožÐŸðÿø£v´Auü/ÅA (ôK8ÿPUó¡¢þ÷¿1ATfö¿.[0âR–ðA`¨‰‡ Dô7Š:ÀÿRQ 3æîö ¸C‘è?®"Â>Øþ÷õïº9ü“/€ÏUÜuûýJÃöo‹„€鎀¹!QWß?uÿ§e wå÷{¶Pýükýû²ƒ½À ¼Åy8H*Ôñehçu½<­'ÏÖ8ÖêZwT¢é@¤’õý _Mìl•WkÛšû£º áÓó~´œŸ¯'¼Ìßä­¤«æ#Ñ”6Nx †¿ž¿±3ØÂiì'Å2¢6HŽ“ô艬Í0ÌØRŒçoÂÄz…vj·‹o»ÝvžJœ¥—ÄŒé´È8ù¼îôSFæ5䈩9q<)Â,ÓÝ@Ípò=¥ÐKýÕ{Ã,>käãÇ·¹ƒBg…}u¢5ádÔä>êŒy£ÉCÔI¹ê¯ÜÐXD.+Ò™¨KœÃYWîZ‹­|Ÿ-ìHro¶×V º§0ÖâÞ™—Îë]9£³ÚÌ1øÊGp¿59Ê»>ƒY¥Îír$ó¸Nšß‡AÉÀjì^þ©5 /+¿2ÕD_j‰Å²Üžºm—$ h‘& úT¤ ª epµ3^ºy” £a!ÓU»«Íè¸æ>ú›÷KѤÊäA ìb·õmçHoÄ œù3=ÅLP¢IWöAÿ~Ò+5‘Ëw$FœJ¢È÷ð+Ž„¼„Ù@ýü< ÝŽn©§r SL FBD$ï 4wÐ2µqM%ÃäŸÍ’9}® ¯]ª{!Ü*&þŒ?`yêäÎc½Ãâ†{z½_1-m'|‚8–ùÝO¬Ë´Ùԑ‰–ƒÄ›]Ó™ ±ù•|…†Vdåæùvqßã¿ì\4ç›È7F>…F¥öÌnXÑw=Œ§Ë|=uØ×Å–¶ã¥Úüíã„ÌfDErˆ)´ZÕ’ Ò®øq"ÊÐl¨ÙyÑŠƒè³k¹øŠ/`v%%¼äb¹Û¬}ìò½ÒUá1€”ˆm!LBh£Fë«„/~¤Qàc‚/â¤À©æ`Áy/šƒ] Þ&TVc‰²ðÀŒ9¦5š¤ñ›ŠËÉeÝG²ö:>õ!ÐÕÝ’`eñïºB>ñ™èˆ¾õ–‡÷4|8ر0v¥}¬Õ†i*¼ZvÞJRhš07Vh¢«t¢y+¸a%Øv¯¦­®šæ‹'@å5CM>¼ÏÖÓéNí×'¸¾üf¬ý€^?[)õ¬ô(«-aýâ;kêF&ôòOJó@Mt}Zå<›ÓÒšI®(âµ ´d¹—'”ÎÃnÂe7y?WëàèA£ÿT–ĹÉô¹Æ2P¿zÛ¢Ò9|“ø¤,T£Rgx&žQí^ìËÙ—ßwîÑ'ùa…œ5–Êê;Ír—cX‰ä+#›½gø"××oãË= Ð–r9ônZ÷¹¸F5-vñ 2YÕX¾¼·f]ª‘qÉheêbûyˆ¼1cÙ£=ï0Y¶·1õTjnƒôèîÐÁ²ªns¦ª¯-iÙTÓúG˜úŠi %¹zð¨ g嬸ó†(Gs‰ºœH)ãlì ;òj׺–è•Yž‹Ùd¥¶jê>Nì +¡¯ï‰ ÑÃA‡OF uÕí|5&*ÆÝhÂð?›Öuñz¼I˜4+hû¾ÀЪɢS w¥žBúhE—-^½ht9Ð#iŽ{¹‰ÉÁ°LKö¢ñ@v-Å…s>T̃ð=•ô²®€›ÿ† QŠ\±v²ˆå‰PZ”ÁV£¸]{8€Æ[¯4"¤M‡#´‰ š_lv{†…0 7T¿ø[²¾OÙù¹ÝžoÄ”%Éc‡6 }³²ÖÒF÷çý¿½\Ìs´cS<÷^Y¯·ª­•³1ˆ§4ÀhÄ\ÙB¨·ïhDÞ;éHSý¨’›7$—€rÔ…+ŬPm;¡¿Ëâ$Ãq½k¶ÄˆuxõíÕÄÂî¬9¼#Øò=ó+ÖØ­ó3 qhZÂæ+·6ÖÐÐ7|‰ëë–ÙŒ[ýÏ€çèkÕŸ§×(ƒºž0H%ì¦Ý¸[¢=‰Â“9ËU&Y.ô€-glàÔd%4Lv2…M_UYðaóúûFNËåϦsÅÐeCïÜV€€.°áå¦ÙOs¾•ÚÁhÇ,n_+÷Nòhmï×´‹)ƒ7·ª–6'†Bz€Ù»²sÜøèGg6ÈhJ¦±hÒOH^«2,ý½±F‰Ä'Ë»ºGŒz.W¸oi¯Ú¢Wo¤JŸ¦ïö nz,0H8á{“ÄS6«&{»HÑ<~¿Hq¤>È’<ѵ¨þ˜c㣢(ËÄìþXâɸÛ>.7Z¢¯»Ë¼ýªMòg×;Žá®x¥‡ »%¶lÕ}[=´L7гé\‘PjWÚæé´qŸáZU€C §<Â7ÕwÌÌO¿ð#¨©ªÏHÒCJås¾#>8à×S"cûÓÑÛ ;.¨¯ÙÈyh;cÚµlÌ^q„:é<éxáu{ö ÌŽ-ƒHÅ•@¾~d@{Ò@f8fœžó(C"v19§Sw¬3<Ò¸$ór,hçÅåÆ¿æ²¨ŸyŠß§–}¬y¬÷ô®PÐU‹. ~ÑyÖÅöhÊ´k Ìs(ÀwM›/Ë©$ò0Ã6â´Ÿîk¡X)Ãüã®2®=ãT$g¼mÓ1úö÷ £ñ’ñø™x€†§žýÇ8—\NK2Â`ÞùèÈç½ øšFQoÞ\;C,䇼L¥Ö‰Vµz¯ t4›.¯/âF°±Ý’ÑE¼yMBîÒÍŒ×rœnÓ¡•^Ú hä:UUE;~ ¬*Ä¡…ñûPUªÔÒ¯=pz•p¬0ÖÛcñ ½¯þ²mÁ¤˜¦°W©æÍßß]Ä‹1û0jÀ,åa1}Èã‡Jï‚“]\ê”9«Ê¿4¬dz#tfm'`b°{Å$3wí$B8ëhM$¿tïÈ ufKrޝhÒÛ¡ÇQôI$³“¥¸è}):ø#p9¦–ä“íûê58÷ƒL4zÑ—ZØ|ŸžÉÓ/qàÂ>_NÞkœ3èL%éËJ\ÖœX%T?8>Û³| )¿5+=‘t{ôüC«`/ã)ùŠaÄ7¿´ô‡X_EŒBì¦ £÷]uƒü¯nfü¤Æf£~ÏôŠèøéöaíºeKœ–1Äûon¥pâÑsÙ»È?ã®ç~#íçX%(B¢8,–óe?ù8½®9cŽ8wO¹œ–v¸m”¿0©Ÿ»ÖÎËDç Æw ¡î!Ô}ö¼9ïìröY=Þ$Wß°žôÓêd_~&P¨l]b¯GÁè"€ùDB©°2ÑQ/ÆBPµûÜ׳ΊHDèªDù³ýlO£ðs…¬ÝÍœCùò*Òµ.×—“'£DV_¯L 7cG3D'N}¨Õµ»ÿ·úœ{þÉ@¾èÅF'&Ý Dq™YÒÇ7ÖŸð;›¾ÇQ]ôz]©0ÿ̧ -ÙŸäõ/h›¸7–úªœêÃd·òxV*¨¾!;)Xú~Í;Fª;8G»*y±øv<±ú£ôÅÛÙåc²}@­]r}Ú¬jÎy‹dLß:§OGä& ”„Æ?™fŒUw¯Ÿ‹¿s¢šKÂ|ä}«íNLÅÞ/)ïà-𬽒<)EÛ¢µLÌa„Ku½¹ãm¾2 qO$(Ì™v¤Âvµ®hžÞîÂQÃq‰õ#×êA6I!GÃ{Û·œ’æ{ZZíxÍ¡®ƒ¬-u#WŠ«[BÚh-šOÝ= tÝ}“(Ý:Û'ë¯uób¸xž×TÆd4(1¼ÖeêИçªêœ1í‹‘ÉòW±§]â@lii³5›¤ì°%Þ²›ªñ$ÆB­k¿|–²ž£ØÙ–ŸÂQ•lª}±fªJo#Ò¼Þ¡:äÛê2¤oi:MMÈ÷‚Y¹ü]ºêãÅ3#Y—3lïéŒ6rÝeéŽàÞ¡A…¬ËÅË]‡Æí&³V µ«ýÈgŠ8'”>+3v¸;¸fÓSco‚îX £¾••æÕÙ:o×>2[ûëãbc/š—?#Y×t²+žÃÝÕÅ„žï7y¬í÷\j,ûæjÍ®ɾOˆ«Ð:³ø*iL-ENâñ 1Œ8Ód] 3TáA2nT™ Y¯îšš”l>£Aq$€÷Þ+7Êû—†›µ!ÉÒÓ&Ñ?îÝ&‹4½Ž~†x¦…”ñ–® çܲQ¼Û`IÐ… •G4@ÙZ®JÓnÎï˜_\-äÓi¡„覰Š!‘Dè—î*>RöÂKçÓq R¯Ü9˜ö¥¾}x’–ÞëÑ5zróE1 Q¶G=¤ƒ/Y™IÔ·ž_f ý‚냆Þl(?5ÓÈlÕ´ôAЩÛÞÊQˆ\Ýbí}%ã˜ç¨ÎG^ÿ˜¼gȃÑ@’“B£õÑŠF®j’’WÕ5¯oèÅ¢ Ý‚³kç+½w¶FúS° òcEnTöë†XýÄ"cÌ ±¬~õ Í=Ñ8iU*7Äó2ö ê°´<¶VÙ©e!«‚ÓÉBØéQŽÅ„Å€ú˜ñý0…$šHgBÞØ¢øš\}³nª©L¸ö#LJÛ8?Ø‚wú;jÈ_Kù? : 3× |šg—\'4È^†…o=ÍfЈ´À¨Ø-î­Ø!"“‹Í5¨Ṉ/™X5ü¬õ4ü?¾Ý8sž›EèÎúì¶_\‚÷v¾¬cdžÆCĨÔÃ%‹?,RÉ •¸0iÓ•™‚Ù_àª)ïHÊö"S±žêL€ ÍJ>UéˆÉ9s*)¬èB5©c yù™¾”2—ˆ¢÷‘aÙË÷ÚËâšp[Çe·÷„BÄ2øYiiNÓ§‘l&i¶\Jb 'Ú›X8Y¶±â¾g±ÎmÏù"¨ï žçu¼§(±¥ñ Ž1EÇ2M¿üñÀîBv±—Ř¥Ô¯û\LY~²ßQ—Hbý¬†)ç}ŠBôó؉EÝÏñR –z :)B_{8î 5†¸Ã:î2¿ZU$Üÿ™o¥ƒþaýïA&óëUë` =¾þ’-­Fð³<Ù…7CÃû3õÍwˆ6ïZD—ÚœôàÞîuìWYí >š¾Oä >DÒõVÖ›Mæ6DR«ü¨Ð‘+fÑJR ^Ù#@–6/x`…„ϙӴñÙlL÷i)SŒð‹üœàrRÛ4–±K÷¯x žºîo¹BF´Týl/p¬ /íóc*kÚ¾øœ8—?4lF1«íoJJÑȱs¢Xý‘ò%[5Ù»ÚkÂï­ÎÍë¨D5ÉÆfÄæø‘CÙ½¶§¢S÷ÃМ¹W¦žð?%M ¼;¡~ŸíUýÕˆtùæOí­ç@h¥dóµŽÈªîf¨gŸÕT”4£ÆŠPÔÔ(“åÖôW{×ü vJƒìR.LÒ?Fì@ïysœTÜŽæG‚6¢qu¾žX“Žà”¹$gú¶®–«‰R)¦kÜ*Þåó¬îLŽ]õaäÉ;æZ½ï ÓŠš…çI­”^™ž¸ŸºKéÔ[Wr0Y ˜B7•RdÆÃýZ¤¬1ˆð=¾³\?Xª30;ÍcYƒÑ£™T2 iãV«°B½£O^s’î¶zI”îO½­È_Ø2¥TÙpí¼Ñ ·X€Öy}bõ<Û5y©HÜóXƒA›úM„]»½œ§…]©QÖh¯Ù~`ÀA¬€ò×=K"y!jÜ¡u™:ºÁ;øx>ß¶ ZW¾ò/~$·yx™sÇ,ÇÇ{2yŽ,P½ì4'’a«/hÍ>&ç›(ém,Ós¹)ó-©nÇ[n{àg›áÚ7œß)ô©J |ÓOy+؈U@Y½ÚO0å*"Þ§áðØ`,w¹oõŽ£o3e^±¹ñ£`”YúÎßGÕ×Yd9W›zŸc.‹Ç÷•NB[½Îü7AbýòÞ&"¯·»8"õp.<ì§’Ö;oŸÜväå0½¯„æØœ\úHµ5dªyÏ™+½Ç|3ºå‚(wÒÂ%‡%× f}ýB(-Ú7…|rµÝÏBtıËç¢?t½²øº’é¾`³;^¦8Yäš«±Þ­ìé yC[Ù—ÌO;6‘z/i.NêŸ@Ió.‰Ô4>ØÔhÄ+ÏÖXxÉ4|ÌµÉ ¢Cwn6®(•ö±¹7ÀF‚3$ÒZTp2rž uÐѧbÉÃEÁéV™aÈ÷oS˜ˆzôŒÛ_„èÜ~™NæÔñùÞÎ j=w¥V™²Þ¬~XX˜$K8Ü—>#M5½ŸÕtyýödŸ[^6¢¶ªÆ—+{3µF`tãmÒæû¡8×Nˆ¤úp«¦"Âï妷‘ÀÉxBÍú5·g/ˆ Ñý©J½ŒAõYfкvy¬¥0ÛçÜ]›ŠáŽÉ¯Ù$5f¬=]@“dé Œ–­~â_ªfÒÖ_G·Å}ŒO:ÿAï›>@¹äÿCµÇù)žú)qe_l¤ª{5)_/oèU÷¢ DæCîSâ2†¡Ñ)¶í¶Ês= 3SUæ=¿2u=6óçwÇÉYÆD{7_ íÖ©s`ËÛS½ä2è=‹ª|ý¹ì­3|$[ÅaµœïýЉäÖpã:íâÞnÌ9þ˜@%Ž”TJ¤TVE«Š”È{¡£Ÿ§~)TAŸWÃÙ¨F·¾CðŒq†Ÿ÷ˆÇýÂ\BTNhÑõhýî“©r™vYˆZšm0Eƒiý‘òbÞFV‰ó`ûÃ|̊枥/í>oÊ+4C‡V±…ê_Sª.¿ë2÷çÛãy€~J2ð­Š&ñûA <ûâ)†Ÿez빑+¶®¦*×\œß$ËÛȾž¢NFµRîôr~mˆSz Ë÷ﻘ‘kó[ º6ÞD ·¬,ÔÜX ×ç#$ôg\·•x?fØs$Ñì,‚ÒÜS6ŸG–qQpi;¦~ÏÝÁº÷ý”„¹ááÎ~å‡û–œš©>ß•…ü×o°«y>UX+’º'éã~n!Obü*…ÿÅlj ^¥TÜúø ÷sHÐÙÄ<ÁG¥ÞÆÕ$Ê¡ù €`GõóîOH 3U§{í|Ø=ù‚©Ò¨M­eÖt ÷“/§=7¦/àŒæÐÕ0QóÛ<ËOaÅ £7%Ct‚AÞìÁ¡á#VÔ å;ŒW)©Ûj¯pŽšSó°°¨;l¸L0RzTEðjŒ+š•ÃJ±Á,j‡Ûð tqÙQůÁÕEo……¡iþ„óÅј;ç›_ãDd¸Ö[~¬y¿‰[lµ°Ò©÷~NoÖ¸¬­:¡í5Ý}q›­qÚÛ¡“äºÊ´hÓwü¼dº”Ÿ9?L€Ú¡ùa $p²µal9X#âMHy–»-jËCp»—À`%"‰íÿ6=ƒŸtôrщºsyÓ*ßB·™m¨õ¸J»$’DWÛáåÙÌúœjEP'Åð5a0­|‡ë ô‰}md6PÅJ<8“‹i7¬8 ô¹løÅQé±Q·BÜjõÖ`]Ïu.Ž­FºVnn¼Éî_˜ýä}›¬C:LêÆÓ ˆe¨’ÇGk*Nr?Ò¯72÷û×(èËÊ_žb7‰K“ämZî²Wi;ç’æ…àªp>Ú«ÛaÑeì´‚n'»¾u¼»Ê—bàúÏN9 ŒèºÓB‰kHʳ ŽÉz™³nm–ÉB÷Úc.îsó €]ÊD9e°g”Í{ÌÌ, ¿tW„ŸÞN[Áñ˜ÐÁ;¹Ÿ•Øùë ˜F¤×~-ÆÛ«ß'¨LåÔ¢ƒ)Û–Îʳ­¤Þ@í¤ŠY%$¥t“{uŠ©ƒÂäü ¨ßÞ§{=ZÂ1ñZuUU/E‡ÂʨH~A2ŽIÈäÕjÊ5ÚGå~Ë,“sê[®iŸŠî NÁ­˜¶E]‹BNÅÒ zè8Û±glÁE¯úu_2-ñÉ=Õ¿$Z³¸¸c Šå¾zÔ3Èû6µ™œTÕilùH}6¼ËqÏGãÅÕùýŬ·Óò‹W°½…t¥––rjß$]9¨¹ ò&C]¿%ö™˜Þ¾‡%/ݸŠ×¤ö|}omzq~ñ×¥,&tå=öÛ¢>iŸöO…¨ zaèl˜×\9h®¨ÀCáìp$µ*©LŸÝ—9ÈÔìØx¯] T?'¤˜"ȼyâ?$WÄ©|?¶ýAóÊ“ÁY! l7V}S.{0S+tðÐ$b_ÊØ¨0ð}礖/?a­BÃÅž¤’/cãh ÎÆÙ¾§^yHïdg„ÇŠa Œ¹GÆGÒÎßÐ5ÿ:…']íK9«sÚGdÛó…V˜ŽTž­)æèÑ¡<Í´½?Cõ—¬x1AÄÌÆƒwóŸD¸#:"o¦{ÁeÆÃÛ :¥>÷1 ½+ÊÓîÚ&'Y[dà ?¹1wMögx´Wú¶‰Šë÷R $«„fü‹ê¤G¢‰³¨Sza’,oÇ%ÙVm;/¾‡úGÐw-aúÍ–`ûF;½SoØøæ éÙwn$&ªöÖ&uÍ_0-߫ð™jl9˜Ñsbø4UOÇKV?rD½šffx\ô”pGÛØ’8á‡DM8N¢(¤;¢´ÛXV¤j‹k;rÔu:¢!3¾ï¡·dÛQM3ðŵ¸ìã/µ[þÄËœ…£Äúe‡tè`ٛ׊tMêâ_»ˆÈßåȉFCîH…:<ï71œ¾Üß?¨oÚc¶U 9 ñ×îÖëëÞ œNxÃû®‡8&;ZßåGªyXêº×»XO\¸ƒ§%µƒ·‘ §MåŠØÇ]*@­Fìç1L ͉ªF%c½ÉMoDUê–îI€M³ \äˆÅÙ¤³§ïoQ›Ih6¡¸›r*bÇó½qŸ®±â‚þ¡¨Áê9eJÿ™Ò€!è–‘¨5¶aSuh”ç¶ ®ÐéÁ^¾Žx ã?<Û6f‹È¡-$¦¢<ü`7³ñ]GñÚ6NhdE ‹?pÞËËöú?±Jíé‚X,ÙÐó†Åð÷ß^Š"@‹ÐÖìå‡]ôÂR?U7潋t¨·ÜÖ¸PÄêüZµ±þ²[·m3ß|G‡‹A¶bÚ{Æ´u¾Dô"£E<û(‰À0¨Ê³ Éä1¦€ÖKM¸háã_d>@°ÛÔ!€ ï–ù™ìÁU.7˜Òð&»;È¡$$8œ?iÏw>#ˆúÊ’UVÐ…ët§÷Ñ2P¿¼I àŸ ëûYžf°j6Ø/O¤óÑeçKQx½ø·îT­÷Gt<†Ñ ò ±âZývˆM×ýNînÁ_œ¾ˆ ½ç{¸¯ÄÓÞd\·œÈ¥í©?zØòÎÝ<ïÿAS endstream endobj 1230 0 obj << /Length1 1441 /Length2 6336 /Length3 0 /Length 7327 /Filter /FlateDecode >> stream xÚtTTmÛ.Ý(Ýà €„0 -ÒÝH‡Ã0À303t7RJ—H)!)ˆ”4’‚tJ·„ À?êû~ïÿ~ç¬uÎÚkí½ŸëŽç¾ŸûºNv]~9[„ TGóƒ% Z¦âAAaAA!NNCÚúLÂiE¢`¸äÿrP@BÁh ¦Fcü´p€º»3$ ‰I‚Ä%B‚‚÷ÿvD %Š`˜-@K Ž€CQ$œ Wo$ÌÞÙæï_7„º_üÞïp€œ  ƒ€á-0Úê‚Ùv 0(Úû_)¸¥ÐhWI ÐÓÓSì‚@ íexîEz@m¿hƒ] : á:ÀPp„ÚŒ„0€3 …£0îp[(€Ù` ¦ Ðq…Âÿ8kþq¸øël ÐÒýý+ þ; \\ÁpoÜ`s†t”5Ð^è{0Üö—#Ø…Àă=À0g° Æáwå`€²œŒið¯öP$Ì@Áœµü•sÊJp[„‹ ŽF‘üªO†„B0Çî ü3Y'8Âîû×·µûÕ„­»+ðææUSüË‘üƒÙCÑQÁûbb"¨êqþJoèí ýmý‚1øûº"\v˜& þ0;(æCâ‹{@h¤;Ôß÷þ½"¶0`µ‡ÁIþÉŽ¡vÖ˜á#a^sA ÷@Á_Ïþ,1ô²EÀ½ÿqÿ=_ ±’¼¾Ž>ߟŽÿc“—Gx|ùA¢þû¢ Hó—øÿ;.öW‚ÿĪÁí€ûªÅÓß{üEî¿ÄÁøw.m†µP÷?$·„`^ ÿoªÿù¿1üW–ÿÉÿ» ewgçßfîßöÿà v9{ÿå€!­;#-Fðÿv5†þ­ÔæîòßV54#9¸=†Ìü A‘?8 ¥ ó‚ÚêÂЇ?”ùƒ?ú%5gª‹@Á~Ý-˜(AÁÿ²aôqÂÜ( /› ùü{_%8aûKgB¢b0 ö&ÄÐIHTà ÂÒêõ›É Æ„0=úìH’_c1QÏ?ÃÂØ~Ã"÷@#fƒ‚  îŽú *¡ö¿¯F”3åðÛò¯ú îH$F§¿i„)þïõïK õ‚BH¦&aŽÕaMß+å˜=ù¿,,µ3žø.Þ.¼þf­à²µnvà(:¥`OaFÇÉå´lãƲs,¡ûL-(â©æiî†j†/qb`ñgòM±ŒçÞ+æñé}ss½YÝ]©ÂG/5:*ÄÊ#¨i|ÔÙsú“zi³ÔëQX\ò¢§ ¯“n3ºDpÍãºTƒXX8â;]Å,Žýr°(ì$¤ÎMõáÚÆ¦‘!®^)öŸ>Þ/8¥o4! “uÀ8à^qX97dÓ»¸/±e­åð‰Jí×…Éd¡ m°)Gv´AÏCÿn;·Bî¼IŒÛê m‹èÅõ¶ô×FiØå-½7¢Š#fÓ3šÕd~zbsÐØ‚ÏßÖ,ŸRQ1(Üv>4Y›ÌP9Ü^Çž÷P>'dÙ6ÎᏋ¥´n¾¤e}¡ªuÕß!öšB½d3íš³`fS§ô‰²50¿ß 1+²Z»9Ô÷‚,V¥Ò`QpÖâÊ 8ûíÓ‘23ÓKͬ0â3ä½L”¸ÀÚ®¼M‹~,N•ïü×’ %ìjRšNÚûôxT}sÀ8BÏwGÌQ*#RLwê6s€æcé"_‹}š}ÜGØîÑ©$Öõ‡LçÓùlUx-]cÛ¤ñÿÐV}JEÿŒ®oŸ \,K©À[C1ˆõsâ §v"ùÞÕÝ­J÷´£ÌkÙbîí|o*êÄw5 cç@×ðlT×,r8ê–Â9‚ëíX÷`¥¼Y?[w ÖMsˆ¨6ézäñ™s3n€Å{æEí )šãq3UBÖ^öë«WšŸýæ­‰Åå!;ÍÁ ¼…λ.çñ ã!]Ÿ‰ß°“äÕ A6º­¯gìúØätfËy1ã ùŒõ;“µÍн˜ óòמ­êÉÙžHx˜¯[E† ÝÆ9¿‚ày@ÞqÌßI¿ÎœØ¦ä¾h>)ö‹£IõZßÀ‹]$:Úø²;l={Fž¤N#O9æyWäÝÛ`ÙK Å#`:W YX¯™´QjJrÑò`ÉŠx½R Ô×Ïü=Úqè]ÒÑ[ž/zkQAð,?­FUT¤sZdƒç[91•ê Ó°¦ç}w.ËÐ'Õ€U¤ëˆpç’÷l>zÐð™÷†8‘›°³$îé^%w"?M„„°$¶˜”0¬3½ÝôVÎùe³d5=^Ͷ"üD-y¿/¢ë~C6ׇ\&ùÉžd$†ù ÑÆñ»LÝø¯Ï •DÅ5—3lF_Xù­ÀdíF69Ÿ³—ƒÆV¿/˜Þ=P, »•È(;¾|£Nô­b¢ûSák·³°^tà*¡W½‰8|zQ%døÖ +Í 2 š1¢¨–˜ŠvÉ^ø 0oî/u¶"~I>ݧHÀ«9/`T€ÊÍm”T½¨ü[á4ß—EúEñæ“»¹§ëøè3æëÕàž’í¢ðÍÎÖö “ûbJw¥6Ù’·Ú]ˆ¸xöâÕ[( <éDØ…‡jwvË–ß³”.æÔ á ׄG¤5l©§|u»ÿ¨Ü¬#lÎãCÁ¸Ê”^ÚWÓ3ö„~½•ÊU —¾:í'S?MJËÍlœŒëŽ<(¿}k€-û㦗M×ãPÓà‡Ä¥sàßœñ1ºîUð™ÇXBU¸Gv/U%Œ_šð®Âó¥xºJ»¨›Ù\D2wÖ2´LÄÊ•Ø)UE‰6¹ä!|ßXP }î÷ILUQú÷ÉtÍ^,¨ÅŽÈE‘â5ªÒîóDúzßY­Î`˜½±Yw?íMcKæØ«×£/BÒ6°Æâƒ çè¨ËQ¹x÷n,ÙÏŒÀw–€i`“= WÉô¸œ$P·wxY'Ø…®æDJ± Ò¿Þ.£ö2Ð:*Ré·eÎ?i㋚lºñü-“@œ 2SˈA~ÚAÏçS Îñ“µ],“!ÆÜ·6*Oz‚ "ˆ ¯“wËy¼Ø»åЉGa¢d¥¹0²Gðp¡Œ(‹ÚÊVi±“Ðú¥å]ÎÀiÛ[™5eÊìÃö™ýý_E»)ÑÝdN.ó¶)ˆ/²Ã.|P-§ÝòÀ ]ú«F–Þ º,nhÆËáŠË´AÖ4¿¿džp½¦wÁ´}Ñç1“üsÜæ1Z‘¹‰a¤ÊšyÌôþÊ·ãþq2&la[©Š7‘Šù0z´…uDeáu@h+ðuntâ@QüÞÜ¢Œ@!0w.ᾑÐt“6‘¨Œâ±æw[ú~÷ mñp<ÉΞ§~"WÒDúÀÏ &ó<ØjŸS—ùIôfINÙœJ䉒?å(¨â­s²síäŽT¤„' ÛIäN8_lÚ†þÔÒÏäß¼'øZùŽÃJ›…u×ôTÅsdÛ}¯ƒÀš7îÚf•­Æÿg¹´œ©›Ì¥Åùü©®ŠÚrÞa]ÔºäÙq[J}K©·SÂú “ÇÅxÝ©Ñ&¬MÕ<¾©n6î¶çˆÌkB{1Ú Qº¥®pÓ!±OìÛ&ä«–~F}.§„ø6eÞ !é› e¥í®¡‰Ÿ˜JO0¬É#"¤•šn¹ÝåT¨2ÎhíøtãÂð5<ªö¯™H£&W’Aº¨Ñà’Ô-˜ùU›öØjÛl<åÞjm±w‚ûYSÒÖ£ÓÂqeů‘7!ÎØ~QÚ>Ä9š;l1Žlü5ž­2ë:oß튺íz.KG½²ÚàíÃþb,›L¦ƒeátêd•´àßÛDOOø‘–ÁRA,Í&¹ºaéÖ¾óÀð6~¤ë{Æ òÖÅTRVöjËè“´*àOXƒÓ–[û£Ôk¡ÕÂá¼Ýw­nïz©¢*bT^…¤«´ˆRàKÉ5œlOª•j»ÌW¯„¼´e@êßf•Ë{sµfINWfñ>×(¥dç:êÝ ŠÚ®{ÂùɦØxô-æ°ÿ4Ów ɱwt³|&&K48J¶bƒIÝ4.W€+Kô”OÔ›‹°6v OU ôžƒ€ÅçeÌÐGÒ©ÿ”¡ŠœNLÆÎ ¶*d š.ÖÌrCîÔ”¸ªxëHìËË i:¤Hý±}kRðÄZ“àÉM‘ll^ ¾+V½H9½½-Af!\¿™”øFæ’:K5:“¥™ÒõÏ1dóY¼ÄÏ»¬ñôžä›râÔj‹~\ŽÛ³Þi)²KÆ-‹Dš3º¨‚f·ù†FˆP¥AÎÊ7èô€]ÞP×Ðñ(¾1€Ùl‚hœ Yýbȱø"ʉ ˆÛT-:5DfèŠÕ]›ësDüŽÞaëåU§6YyÎ3ê¥ò§q…´9¶2õk–ªMR² M{–EíAK­- ¡š¦lFâe{¶~>©$ÿNÙG¿"¢ËY:>·X>ÔZ=wèê^þ“^˜8(ü¥‘C,M"Z9À^ÖšVâôÂ÷øÄÝá‹ç¨Hâ²_P+!›üÜZä1Á’¬Íñݧž„y×EôuÝ 8Y]´ý¶¡ï¨h¬kÀS'´ ÍŒçxõ‘N©0ñcá†C’ ãÛ·Z' ?•t °Ë‚(ã_ÕFÎÇêÎà?+ ‰QŶypW”õóÁIÅû1êÝq2Ñv9­«; Ÿp*>`8´/¥åW'•?¬ÃÓZÞ<0þYˆ,ËºŠ¬‘úNÛ¯DFÜ%©)íN·§H¼¦¶p"Ø’\üsSáVwÖªÏtOëF鄸ðQ`ìt‡ ÇŠ>“ùã†Z¶ØŸgÓ]Ö™á ?Úd^5×HþôNÒ¤„mAÕÞ2Í)_{¹ê$ß«ƒii¿:\¿‚¼È 9êg¶7®Y¡ÖH’b»¢8l~y½õ¨³\ɺñ•?šÿûþK4I¤›ói°1®¾¬¸®UhÓW‘Ëô·úø1ÄZçb!ÍSlã>Xá ¡5ãVxܲmËoµÕaÔžû?+âGo ÖNVí𳉎&)^½!Ù¡ XK<¹›Kã·XŸ¬-z›z?€¬ ÄH›ôöH58‚–wêpnI~¯žýâ|Šv’…È"™ÌpR¸/¦Õ^þ©6¼íôƇQ ½ý"æñ‰ÂEîU»–“Þ}FŠM.™‚|ÿØý`¯P+즚`›JpüÇ/¸#é‚;F:ª’1õV±ŽêymÑd­âN#ž‰)F!Û4ŠÒçŷȱÏÚÕúKüº†Â:)ê?N†ÉwúF¾ÿÑ…]øœâyÇqQE*tK}v½>{›Q<.Ä9Á,Okô[át¸œH›á3Ý,×ʬ­¡×ô?T¦tÙíDÎð5&'¶Ä‚¾&·öð6z•†ô{ßôœ´»ƒW\=Á³DæoO{“ái²Ò£ˆÝbú 7GâV¨ ‹å'þh.=4Ò@(QœÙ`êü2ÓÝÜï† ž£EˬTyÒì()ój|¬ô‡äžG<Áˆ¬ÖYÊ âéVnž]U{é6ß…ï#os,e• ëʸO®§L¢¨îÖF?6¼h]^êK}•»ƒ¸Wî!#X"È€Ã`}‰åQAS'Éöûꇋ|ÝP#ïT3ÊM|Ôu’;¥þÒ‡hÿËýó)njVtÂ{Æ­"Ù”(˜õÆ,˜±¦Â/:¬œô³C}øŒïtÛõߪù¿Ôì<~æUe¤ø³Œ 'ý±ë>) ß7À·UËLŽ:üÚ¢eçøØFUÊ*-+ÙÍÉ­;WÅÉѼ3?:ó#-zœV*wOÈ—X Lj +~È«§æ–ƒi{?ô¸"ËbاÁ/{Mޠ˳NšÍ‘,úÁ Ö"uS]ú£¤¾ùÏØo}⦚£ õ_ ™ä—ïã è˜O¿^yþ£6}ÌØð9´AJKümÐTD¯óóöÝñaaÔ*JrÀ?Ç¿¹Sx€ÇNðÔ°DB¤‘·l5@¸ËPŒâUqñMçÓ¬±Bˆºö\¾ ’nk·X.ÊŽz ûÌÁ®¶‘MÝÈZâ+f"²\6y£²¬¶û‹ŽIt7.žÁÄ™^IÑd"åW;“Íf¤¼kk7#“©d’¯{Gë¼÷N55ºŽk-¾«™BI[Ž=­©èß+]…¡ª@µ,¹’<°ƒv§;?Þ="µÄ}\Î…`8àpn–!;7Åâ§±í|‘~¢×L²Ü~X'÷ɯG…oÞP>f3[í`2”\XgâPnEþsûˆïÊù6õÐ!èL°2äÔ7Êd]᧺NЋÐ.SÖË ú̈Iò|/å ŽÖÒ)½Y:«,±Ã[G³È)­UÎì‚ñÁ¼x0ÏG¼^5$¸9ÖKPÊ}^L®‡$>SZAâXˆ •d&iÕ„%æj Éí¾L|‹Ô$=SxvgÄ!ƒÄSþÑÍ®RÛtäð¿ïµ¾ÙX½†_EóôsB-»-ÛÙ²ºÅë.ШOa93üýÃe_-«»[?•Kä]‹d`ÑÒ\I ©ãló«t>ô!j=lê/;8± B@r.‡ B(ÍŽjkkgá·½‘›möCЩ¥üö2›1Ž<ÅTB9e…zÍ3ÙlúL1_÷¿õ*Ú*˜Œf’Ô*wm©ú ¾¦)Ø[$Ì_!Œ <±‹ªâÔU×£,› eyö”½ÇlûÉ99“ S—Ϭœ5Ó …ØóÖÍL$Æ”rwòlÇ׫,V­d ’M‰ÇãDeú8Ü›W‡x»›±{TñhÿC)6Uü @TÑw½©Œ@ÊAEÒákýžåð2š÷·_û—ÐòQ$è¾9tTÈ*ª)ÿnòŽñEY¿½„† õž` {ðâØ§È8ô'¯ˆ¥W;ëNgÉ:v[ ñö”°Ëa³ØË3rÃ1¯a0mÝÝ£DÆYÓØ³EWÛ-û«Ê|œ»Ð1ñÕó½k×s >dj5…Ò;jÔkHYIæ¾éÿÌúµf‚OÏWÇL‡•ý†3ŽR¹sBtìSFB@4ªØ+‰C¿l_sä[izä/rM%s±'¶?·NFÚ­‘z çpâLVü¥ëúY[¶yqcgã“\++ˆ?-‹ª¸´uÑj"KEæZö¬êj¯ßX}`åÄzL:’2ŠëË{´ ïö¢õÙ{åñ!…¾jhí¥H¯÷L)Z¸xtíõx¯ÕIäé:ÎTÎG7 ëåìçRü‹å3Nï|CÖ‚òñowâ½¶›ÎaÇf=iæf˜ˆydµr5רN‘¨*XLAX;9²Dž&º¦‘f}4 T+®ß1ãŒK-’ M%R¤Û¤GªR ØM‹1QÆ#_…ämÌßÒßQåÚo»cüôzÓïkþg·Bœi§{|w™› {ñ%|nLjÚýì=ßFV\«„çKmx¨BùF鱃'Éf¬KæýÏøowõÕ;ª#·Ñ¼7¼ŸU¨[°+ê½[s ko±Û’‘#–ÞiG®š.~Á+I˜4º¦“à]̢Țá7z5;/KÊPú™VrB¶^¬5‡ŸØä1µÄ`I™ÝÄ+qÌæmZ¸«wQñqmš@Ô)¬&4s€Úúæù>iV²¶4»h,¥fÚV!8Mqµ´ÁvÈð`AŸ¨gÙˆâ½`¤ÛöÏ.À=°|Z÷“ýf´ÀÄcr³F×ëIwÐ\"—=¢ÞlÂ7-ò´mQ[Z$s~q@3áeª~òû0íø)lïkFaëç.|Ô«›qo)˜æm©½Éëv¸ vPDͭᆂq7Ý–T>”ZfÿåÑySZ1TÅ Ôï³=–ùÉÛ¡ÌD¹Û‰xPÛÜ0>õANƒGêçÂ}¾ŸËmhz¥úøRŽnè;?Gá"œRr)œœšê‹1rmø‚ØIýïn´½×ªÚµÏsS»Rb©Äp{!n«ø89C7ʱX©ÁvZTÈ“vSd‹'BääÜÔ²ûs»S ÙuéU™;¹z‘þìÓ“húAâ…ÌbcøÑ‚cðÅýŧJYÐèòäÈó÷f²‡ÿ¦2È endstream endobj 1232 0 obj << /Length1 2072 /Length2 17492 /Length3 0 /Length 18743 /Filter /FlateDecode >> stream xÚŒ÷P]ÛÒ€‹¢AƒKð…»»»ww°pw ,¸»»C‚»»kðàÜý²÷‘ìó¿WuoQókï1ºç,ȉUè…MíŒv¶ÎôÌ L<Q9Uif&+ <9¹*ÈÙø9<¹:ÐÑ dgËó QG ‘ó»LÌÈùÝPÎÎðÙÅÀÌ `æàaæäab°01qÿÇÐΑ fä 2È1>ÛÙàÉEíì=AæÎïyþó 2¡0sssÒýí¶:‚LŒlrFÎ@›÷Œ&FÖ;ÐÙãBPñY8;Ûó02º¹¹1Ù81Ø9š PÓÜ@Îe ÐÑh ø«e€¼‘ ðß­1À“T-@NÿR¨Ø™9»9ïk ÐÖéÝÅÅÖèxÏP‘–(Ømÿe,û/:À¿ÀÌÀüßpÿöþ+Èöog#;{#[­9À d (HÈ28»;ÓŒlMÿ24²v²{÷7r5Y¿ü]º@BX `ôÞá¿ûs2qÙ;;18¬ÿê‘ñ¯0ïÇ,nk*jgc´uv‚ÿ«>1#ÐäýÜ=ÿ}¹V¶vn¶^ÿ!3­©Ù_m˜ºØ3ªÙ‚\€Òbÿ¶yÁÿ‘™ìLLL\,\ ènbÁøWU{àßJæ¿Äï=øxÙÛÙÌÞÛú€Ì€ïཛྷŒ\gG ×?ÿKðÌÌS‰3Àh²…ÿý] 4û¿ß¿#È Ãô>~̦¿~þû¤÷>a¦v¶ÖÌÿ¾bFY--9Ú·ü_¥ˆˆ;À‹ž•@ÏÂÎ`ffap¾?øüoE#Ð¿ëø‡¯´­™€û_徟ÓJvý÷ Pý{A¨ÿKÞî}rª?ƒ®ËÄÎdòþ‹ùÿó¸ÿíòÿoÊÿŠòÿ:èÿ·" kë¿õTÿ2øÿÑÙ€¬=þmñ>¹.Îï[ g÷¾ ¶ÿ×Tø¯Õ•š‚\lþ¯VÚÙè}„mÍß'šž™‰í_r“Èhªr6±ø×ÔüK®ö×¾YƒlŠvN ¿Þ0ï^LLÿG÷¾d&Vïo§÷Ñü[|ß¡ÿÍ+nkbgúײ±°sŒ<àßïúØ^Ìï[i tÿ{˜Œ ¶vÎï.€÷}fvŽð],;€Qø/Ñ¿ˆÀ(ò‡8Œ¢ˆ À(ö_âd0Jþ!V£ôz"û‡Þ£Èý¡÷(òÿ%.&£âz©ô‡XŒÊè=ƒÊb0ªþ¡÷ÔþÐ{>?Ä `Ôú/q¿ëŒþÐ{-ÆèÝÒä¿Äþ®3±³~¿–ÿHþºFÓà{µÀà{¹fð½@33ÐþKûdzoÇüønnñ_d{ïÇÂÃÞøÏäï²ú¿±å?ð½/«à{ñÖÿÀ÷Îlþàû;‚ñ‘ßßJŒvr¿Û¾·þ¡~¯Üþø^¸Ã?ð½pÇà{•NÿÀ÷*ÿé{^g7»¨ß«vù¾Wíú|¯Äíøîíþ|¯ÚãoüŸu0qqt|ÿ6üýÞzß•ÿðß" Ðh¿¼`gÂdYÔv_#ŒçF¿;ÁÂöqà2üVcGÇu_)@”ïáŠ5?bI¸kn/âa혥ä­ÑJ‹ÉJÃ;5‚kù{´™ñ6÷ÿ㱓¬ ËžLg§¶!«­©9ÖY“òÛµÐ,56ÃÅî|Æ¡$ESÕ]¥Å eÃoDˆ‰È˜O\\¬ˆAíÂíU"µÂ³sÒdN—B'ñ‡©ý£,ì¿~–у¶RñŽŽ>ÚË\g ¤ôpàÊNfÉwzÄ?=ÅP\·}¡2vS$å͔ޙº”ºÜ‰”V6o’Ü„ìO†ÝŒ!9ß„Îv7¦ü¥ÏKÓ)VÒ¾œ¨ZèÉÊNYÖS^.‰Î/‡Ð·'1ý;¨Ž!UÆ[¶vx:N_Õ)1s6µn4½AQåÊk‘yÚn4"Ð1 D'ÒN°í§– c¹hm°0é\«VÐÖ‹,…@NŒ~ñDxL ^€ïÍ1y:&É ÊÅL{bl£dlB‹c<«=Åì5}̱[`¾èÓ0 í[€ï ˪5Bt•%±7‚TyL¢/)þ”g¾ßâã|Ùº%ä…C‘X:¥5{“i& è½’ç„: 2›}iÞÆ Ñ{ ªçƒýäù\ûô–ždy®‘üL V;fŽPî3™ë©oB,T‘èZ?ÊÑã{¶!þY¥³®¬¯Þõ†,¡þTOBvQ§ð >/([}Y)Vðlí–ì²¼‚•£Ì¥¼dtÂЭÎÅ7¿® ìaåv~÷Mçno-é¸ Œƒ1ÚåìPù6®_ëGIÂYÄÆãÒß;_rçHdˆòñÐ~>f—¥Œ¤Suåëi:ΕrVNh 1xû$Ùp? ` á0iS‘MÎkºâÒh|sŠ…‘oÄÛNjPb°»HcmP̬›æKØiÔ´9—ë%?èAw±²Ý@_–fA«#Aü˜VñõW¸)­úññ€"ÁðåÐbSÓIR˜¤~›|9v`<™dÚâ´•ïíG”:''Z•iN")^*Œêädx®3"”¬(8¡yæ\‹²ò kÞŠœ‰aÏeRlÁË—TÉÒj]F‹i[G½÷znRðL¶¥OìT?ÙCöNÂÇÁÎ[ÓÒ)õ-½ª†Ò|­sšâoql飆<æxJæiûF0Îò›ICÜ$ͤ…àb4dƒemh¿<zéÂàh}â:m—8íÖuŸONVcùb›Žv¡¶ÅöØñÛŽ~£º@ŒÝáèò;œ¶ ó_öÌ•g…CÃ-@Dš¹¢%ca$9CƸ2ó+ÎæÈ%"§V&1^ãZ¶,Í ä€‰#²9ÃLÿá;*®D/JôqÜ)I¦qîMìKååÝŠ~eVìaÌGSb­•‰¨cîV¹P¥º‰Œêó¦õ[Uà°k=´¯"û«˜Õ8Òg«øÒ7ö™Â7Åè4Í¥€^: èšÞT¼Ë[ä‚T5« –IŠÝHg«"Z u>²RUóbÙ㥗¨kOnÁ3ýï³ϵT¼¹,µ«'G×côK÷¾œ•Øýz(7_Æ+‹)”™t:Ò§…åô²Ìæ5÷Üõ#@Í÷©{ç¶jg_òVÉGš^¨¦»TcqSÇ0>1ËB1|wk} ^—ª,=¼#¤74çÇņ©2[£†W¯—üê÷‚ L—vÇ´”À3G˜eOívâ.‹þŽDì=%©åØ@¶»8˾’Ýéê¿Çh犷à9¶$Áeˆíšà‡pYá3ÜŸZŸT÷ {[{£¢Æ"–Ö3–߯¦ñR¦R±(êñÁmÙÞÍÖÎÝÃ[ëö‰>/ùoòä'n}Ë ô¦Ÿu ðÆ\`nŠ'QŸÄÃ&ÇëX&#åá'Þ÷1å±'Úµ”ú»V DÓ›>~¶o eóÝ<›ìt¦æýÌÛœ6ºù™åÇÑŒ‡óì6%0ï%Óþ>˜nÉš\»3~ôó® Z›€#ÇÖ¬ºR ggM<eHY¢è”ã€Ñ’Â~‘96ð]¨¨1E”Ì>‹0 õÎk§N¥1÷HÓúƒ¼r©cP+,9“ îæÙ Ãv[Ôoc®>Õ¼TQ¯p:EL—n(røŽtf´ñ¾¥Ôký5TéÏæ’ì峇­:§},°NÊÒT ›$ˈq!ŽŸf4òÍ”ÔÄ]'¤ëÜlÀ%‚€f2Û×ËOxýs[$Îz®j¬—ùÍ=1@«Mí8cB–¿óf)Ë0f‡—ÖrE,ï5#®ß…þ¡£cVuŠ[·lvEÇû!(¿ññóï¢bFÂ]¥º¦Ïņ\E¢\•o¬ŒsÝ«±ë4Ì"!tOS^?ðÛŒl=Žð¼½41ÏE¢7B|+â~Áö•0 \è¬dº3ÙoܱÍS^ ì’¾ µÿîRódwÆ×«˜:\¾¯Aáo•2?«sDm¤ Ø9?³S°\\çaµ5jkL’½vÊ)ñ(N¶uéžvM¸ݶ2^¹ Y6ñO¼mÈ& }-¼+s땟iúä#±jªÉ Û;~ê1¸w6AÞb$WbÒ›ãw̘wŠalLè'C‹™žÎâ°^nf†ª„Òm Eo{€!‹¼hÇþ•Ò-r¶BŸF=/Á¨®¤0#4Ì®áâ)|‹)1Ùú”‡ú;ý3vé{ð]‡ùk~z(ÂË[ÐQqù÷þ”f½‚õn­a΋2yÚóOÎw7ÐÓ9t|¤`/Ô¿´Rèl®”™K6¶ŸŸkÐ…DC¨ô3?:7l½)ë3}—qF;óšïD6©"™ß(¾;3»'ÞÜà÷Žˆ+UZ„‡Üæy¾ˆ§ê„Ó ïõ-‘Dtr%´ôK‰·*WD0Çßf<ÿTÏÿaùê6Æ@O Œ0§¡;Ñóˆ(QõŒŽL½tšÕrütE{ãÇuô Á›:û¯ŽÆbç ùQ%‡±ª“åÔI+“‰Û­S¯‚L8ïbå–ˆYp„ì= WQa‹²d*ö\n®ca..»#dæÑû¤š²¡°°\•…!DaWAÁˆä„œÖyˆíæXu+'~kWãõÉ|p®aﺡ^Ývr¯ó™’z O|iÌŒ›$Gõv•Gšpä™z>íØlÙ˜ObÛäÍóA&ßLÖy@{B½i‡‘©/nxÛXÖx¸*퇶ƒwÊyæo†*ÓVOëÔš+æ™ÃâtÑ]òÚpÄFÛ}è×ѶË# lëgÿ¨Ê¸°ÜD¡ù57\¸–»¢E'¤ÌëVŽðzW:‡“}ZSæ9Ô6[¼‰5yä œ¿ƒ…\³Š3á÷<¿1Úy2œ7$ÃNºeëC}D†ŸŒØD“Z–ÔÏ`¤t†ÕxÓx™yÞŸpÁg§1ùÄý,ÿk2ò;Å\µÏÏFÒLØUøÎǯüû!ŒÞ?D 5Y2üçF5°ºˆÝ„“ãY SªÊñ ©LEVµ[)r™á”7 –\UvUÁXüelíwÊtê~Ø ˆ$Kž[_\:©•U‘ÿÈÞ#Á¿N6@LºÈô^Ÿ3¯Mü` _µ Ñ„~³Êƒ›[’Y ¿¢«&üÜmÊ'd€=ò}­ê~K=ˆW.g}‚ÝÓùBÎæ,éhàµýsèâR­Þ±Ȧû Wv´8÷vˤH®q:ÇJ NJºYì„oP]kðt¤uÆX€±*uN.5 k¯çg€†H¼¾ÀCË->5ƒÆ¢Ú3Ö4´'úýÍÁ6 JQ8¨)¤ŒS¢·z,a[Ó_yºb£9gV‰æè¶{¶„ÇÉСåð"gõú–͇?ñÝ¿Í  ÔIWÄ)³Ù!®_ÿRø\r~Wp[ÿºé˜<7+Æóu‹Ðªù•E0ä“j*Ô)Ý£R‘Ö>œtóÓaP½ˆø!ôç Ç6mc8¬‘•Þ9_ n“!Òû¢r“dœ–…ÔSÙÁc¦¤ÑNÔˆ´u‹~íÅó:å@ŒÏŃš9É2‰èeœm/^QJ µ´‰¦ •.c)„#o!•âWž¸Mò•-T$ƒ²äöÛ¸ðW`]YØ`Á!Kª7¼ or-Lé4 ê£¤{Ì÷'â̼¨AÄrãÂ7©s¼ÕwKƒá>HÆoÛ¬;òYV¢C¨©õÑKV¡nA·¥Ië̘ÊýK7ªÉOýIUƒøÑ±MDælDÓulÖŒÝýšÊ´SÞÒfÆA^¹ˆâ¹¡zì:¶téÞ\z„Õ¢9tØm"óàêÃ$4ò…ÚsƒÃÉæ Õë4†ßŸWb`2 ¿†‹"ˆµf]^QË΋‹ýDéY9ÃUQ™³ÃuV0ƒ+ÓMƒQåg\~º~òwšî¿éï"Џmp.-ªW4“À.¾M…[e0:I¢%^Ú3î¾ÅKÿ ^ꎻlI~Ò4­uÒßs&£ñÇ|™¹ž´ŸË¨eå,Ô‘ÃÀíÇ~ùàÆ×«C 7Qôó~M ðaA«vQ3ˆ3)éë­Ä!%§†‘ê¾â­à9:µ‘JÅiøÁ*ÖZ‘‡×cÿ†4Iõ='æÕ÷³çË'ýi°,?T$©Ù#‰“¾Ÿòb˜¢çë  ¢C§øéóí †ÄOu¡“ÕÚh\ 2ÚrxI6âw’öšYs9·Û9¼­¸;.ØŒÎmuUºÛÉ9™oŸÒã_ÍÊÜðŒõ¼ ßžñÓÆ†%œö%ïÄ~ÎezíxNå`µñÙGÏãñœû±cOÛ™èãÚk'Z¸ýõÓRñÆÐø—=ÁÔ€exà«Æ^—26Ô“Àõ«x’q°Ò°.µ—aëU3Lðþ5¿Û/TÖPY0ÁY“aÎ"˜§‚õGƒ"3|¹…0ÏV­1¤r©Å„+|NA§Ô‰_Î,ßxõš¥™õ¦ †|·°óqè!¾W êNÄíæ²E6U¸o«ãmÜÇrp-¦^¥é]$„d½1ñªÛR'R ŒWz2ŸJ¸’¿æœý8”þr§÷Êœƒ™‚zÔe¯ÑŒùÌ?qÖZaçn3«6Azçõðqé«ã îvqÞ¹=ÿÞTz?1qŽdjW,á´“qêC|ÈïiÊà›¨ób·ýÄÙ /äË‚µ´E¡ƒ hª.ôüÎp%ßGú(„+gIZ]¯ààŽ&oÅAŸ '+v³~&̶’¥cSmÑ‘hk1‚ùr;ñUë¢Ùc»k´'ù%i¥£ ¸ÉMÒÏd p)°¾»½*|x¹ùŠ:ó‚EJí$%ÀL÷³Û:Ǭ\:}Ý:[>6ÓŸ~àšN¶WeSÜ÷Àø}îYp`­û‘%`¾ò³ô̈»«Ý'ýMï©,`†JNô8…z´{ žòpk§å­Ók»ˆÂ Ìê³%¢aè~j+x¿t¡zx¤U÷4fÒÖëXzŒ‘…v7$ÌjðÂõSí½,¡¨õ‹8êÅpDìŽþ'zÚ‚‡˜ ˆõ‡² ¯E+þÏdò<ƒâóþMa÷¼|•`ZIELi&-ÈÛôö¶ Ô´…?#†wä°U… qi2UçÏ8o³»%:FH´Œ°/ 2¹åŒRÎo¥eâ»&³?}Õ4‘/¾Oë! D¶V/añj|ÔíÞI_(º-Dõ™Pv»ÿ%1od#L{1°E›Ê¯6Tâ‚ÿ–eþ’YTX0Oßhí|¸·5rÜ3gëă÷•üPãw^ÝôŒÈŽ'Z蹄ìºGònœ·(ê…sª{AðçõÊk_†ÌU~…®ç<[4Lõ»ûQEˆZœ}®YRU3…ãîàΛF쫞yÊ ±”¾†àôWյʡ5¤7Òƒê÷Ó#v>¬ä¢rù“·ü~,Þlý”oÑ8ÙþãÖµ¬i.Dà e=ßéð5Ӝ⒳o¶Â[vPñŒè¦·èRˆú.<çeò¯ë2 ™s»Ð£^É×ÎÇD“ÅvGbáÇtfD}ä ¬DáæK±DÛ‰l]u€3šKºFhðoKnÙëŽÒ¬_§|p#ã‚0 Œ¿!,í'1Kg×èÔ; – €!\ò¨?=½:_ Ðúü ÏkûxAa5º­O'FŠS؈ùðå”8´>ÈăŒµwçÔk‘ÈèÜÁȳŸ vÝnQ-i ´Ð'·m«=1>†6iC ÇÄRÚ_qt×È0xeXd=Ž\Í&×U…^œ –„eH¦&×K‹ù¡epb²HÁ$ït•5ïü¸»–~ñóÞ0F(B*ª'¼p‹èmPpÌ“Z~Ž¡gAv®Ä_œŽbFœÕ}7VQ É{É2v_žÛ_¡™ ªâaóµLŸ>Òð"¶^n·¦”ó:ÀÎX É:D5V‰ *¹‘Ö*ËÖŽÈàÀÀÅ2èÍ:–›ö~˜ëÒ…X@¢†dl‹¹â³í}¶»*‚y&Y³_UøS`¿»H4ê¬hMžaqhÛ‰Þý¡¦hŒ¤¡™ÊLhÚþ6ÈÁ>麀ó{f<äˆB¾®dF§€ÁÞž@ªZz.âo ¿åÚ5mú¬CÑ…]ŠUiY¿›e«’ó~sO­!¢4"t+òú²ñŒã%$êê@·’«Â= ¼IÄ™ö_òO!ZKU™\º·_°8‹_"ÎÛH)ᙥÝ|LƬGÝ7ìÝ#æsŠÚ½jЂˆWÒ²ÈÀ,F³—äK’ï÷•H½¿3è’®d½@@Jàµï3±r‰«9EÕ¢æ–A"Lªi¢`źÎ%n‚ ¢ÃÀ,å’ø)Û_…ÛëldhÀŠv ÷z†ZßF0mEœv„KBÎ-Éáy‰¥îÿ›WÈ„gÀ/˜hŠöôÅ1ù¶'¢LåŠØ'økÂ3¡÷‹ÐË•b#v~éón/<-¦ $DzzÃø2HÚˆ©»Rsy*=s1Þ/…0ЦPû e¢=›¿§¸œOWõ¡©ÐQ8ˆ‹¬µÕS ÂB„í†N/lÄì,z‡»Wé%›2hsÓý·CÁo%õ;Õ:ÅÞ_2³¡vFmSvè]£"]7½ÍИ™$¡tk¯‡ ˜Ùäßgoã9 · n{sÐU£È]¦¬@ƒxhN`ÿঠ²‰$ìm€iˆÌÏø‚•¦õÆÝ§GT.`ËXÃÁëÊrnÆ}(Y4)…;Dóªv²e¾ùb‡'"]f(l8 K±6C§KÏ£ÀrËÓP1#̳'¢¯9£·½+£-UW+$~}MRðqÎNâïYÎÝ^Eÿ¥ë&ý©7l[Ø*Ʀ¸kCH§†kpVØbœÁ_¥ó#^,˸\ôÈéäX‰í7"cÒ i9Q½QY¢ÎT1rÒ %1&vúü¾´üÍš_¿á÷rÓc)qí@ygWih$Ĥ‚38eiä¤ãFe‡®1¾jž8øM÷rá6мQÈ¿à1Áñ§_­q®ó/±U%õÜÿš¢Æ×e—å7&d×=ìÌåSÄ_ˉñÁÒþ˜†Õ´Š &ÚõKø)ç "p"ñ¤IÁÖÉ^_ëŒ"Jà`k6EuaŽœµ¡=_bꬴå=s¡rféé]7VŒªgþv<8•)~<3•ï‹6÷‚ p×fw‹4)ôŇ=,Ê<ìLýC´óoãíbù;hØm^(ðà½g2Ü'ašÖ”2©ÎŽÑ/¬!¿£¨ïofqV’è”d³ùé½D5™º¾úx'ŠC¸91ÁèQuª,jŽP­¹¸ºâ ëÒÎJýìT5¹É;h|ìµaƒVãã{‚4]É`‰7VnE»Ù2ËïÙsóÉÒ§xø5µ`ç^[¦o³3téÔƒÈRæk¿û À{‹cðÞ~C Uý™w× Ñ. ßW`‹îZ­In‘U/ºï¨Ê½t%Î:ìÁé ­BO‘nŸ5Þ¤[ÃÛó£¢[XRhFÏEêc«„­§ó—®§O• z¸ì!ýH\ã—:!µ½d,RJjÓ8ùMº|œ<´0€=ôüI©¿òéA xÎM{Sí×6]µaÜID£Ü`w…ÙáÞI>2?E“«€.Ùå|Ô`ä”y=á|’ÍÏóŸc~;á«ÇÆâÉãy¢V'ÅÁ¹Ú,†ê@¨Ù\¸çØ ®†cnóü`m²A±Jèkb°k–b$F£K€òƒmPkÜcKšja– 0TJYþEÂÊIw®tÉU¯qdôŽQ”ÜÎnhÖOpßãGãs3^5–=8t;npæ>» v ^oXQ°ö‹ÞT,M^×¥Ri‡g›Ä4[¦ÊbWà˜+Tª<ã{5æ1’Äý‘#C=±þ:’&óFIÕv@ñ© \"oÖ¸/@²1pfŒ´ft›ÀœñKnû3‚y~ºV‚lɇœ«hú6Å´ögÜ|¢à³ÑOdp‰¹µ ˜ÅŸÇœ™˜zDU2^r[”QàséÐ2Sñ{_X*¸¦Òé‚y®òÍÊæm¥|!æ¯çõ¢ûK±G3xM=šíírn,˜*5¯äàyâùÌ,€ï‚xG‹Äkšs$“MÜꀽÅû¢©5/ˆü`fÈEhΦG>0‘ÓyY­(,òÊѺ-“D}¨þ…bœ!Ù¶ŽŽn·‹P=…Êí%}gÉìÞ‡K9ãqk^•ù¡Ðµ€/v(fù}ŠuëÃ÷ŸØCD§öHv-­m™a«µ&qÄð1gafP?ïàð",]AnKED-‰QÞ"€óPÃ+&‹Jˆœ–æ5‹ÓÓ[“>}»­äõl?©A ’è0œëP»± „”]× Œ&š)‡ÆŠ&£¸q¿z<ý>^Bá5yhry—ïEô€‡¶ ?(Áu0?ñ[bŒP AMÙ÷!d{IZsy4¢¾Þ¨þð>ØKH2j rö©l¥*/ ‰FµvÎÅ®CrÚ+D²Äz¸>Eu Gógæd3žc¥Jú%Mf;¶³êÁ÷OÌ«À²’rçÂ|}‘o‹7¼Do­¥bjަ¡Ðõ2—üÞcVIEÕK%ܰL±áµ’Ó×$¦–þ-ÀõÁi”¡Õ^¡BgÒÛ$ÜS„`û˜ä̶‰ºö/(m ÉÞ‚vÞ¦t²Œjú­³ŒWÐPßÁ±º(,ÃÅ7ÉpÂea _¡rmÞŸ"HйXê9󄻯@oŸäSÔ•—z AªQµ¹&áA¢pSã§ ¥ø¨’[øÜ{|¾å,îë~q[¢új'7]¦ Þ3õ&Ö÷ϾBy˜ÒÅ÷\¹a(pv›±ÂÝçfuwì©#ÞI—“+ðòÐG'<Ûã»VgÐ~€£v—½9F[ó Ão]¥>€òã !!æ£[6>e™!‘Lé—ëP^RÍ;ëd!y‘¤Ý °é³Bpáøìf yYØUÓ¦ë:} bÀ²˜OœW|Vªß—Í{¿è'ÜÝà`_è9.LCÊzŸ|½Ó–)VÖ‹õ»u8ß©Xñ¡0^æJ™¹¡€vÎBwß“¯ãúDl“˜óòÈðÅ¿´Üu‘¿ª7µc³½^ßÃ%G‡N°<ï6À?äyNO/â r€_™¶M›ŒèD¤˜b¦U”ZÒ §päæ—+•ŸÇ³´×O5«“<Šu8a›+„ }ì¹ÊQ'LÞ¿ú–D€³ò5! hÙe§Ïî—½‡Ý|ŽyœÃ8‘` EÚÇ@W-èý8³€ NnÂRßà³âØ6?Ä'èöˆD^GÖ±{Ò§º©¡oäÁ¬ÉÌ\ÈMHõ³îò`b_DwVfÁh§QúÑ7!§ >Y ~·„‚ÞgÅ1?ȶF‚ 2ßý&ûr‡¡ FvãÄ¡ø¥ˆOïž´i€Ð?½mþà¾+† ú™QyÁŸÕ``|»_#Ï™ì×nŽvÀîëhy†¯ÛR¯‚Ù!½¶›n¡ÙE„rY&L˜0?4í/Õ¤ÈÁ¤!.e“7—Îë°Ó0\z’‚5ü[ÊVÑHðÙå`Ʋƒr-°µßÊÕ­›yŒ«9 Ρ¹{ñhŠQ㫇ÛIHÏÈÜ­&îÊl_šü˹³’–¶¯$÷›Æ™y<¡˜íÑÈà5nIÚ Ë'F­*¦*”šL çeÅ)F¤\D7/ø*}k’sœu{Ní“öÊ5:tÞ‚˜2eúäW¹£Cøb)PµÊ‰Kÿèºá·0„׋bËz²˜µ:Eø6¥ƒVºõr]|ýá¹n«¼{ÈFB¨%ÒGlžÐ€¦~èÆÅJ×ÂþÇ@P„—ø|€ƒßÆ ˆí {VγõâlÔ–w|2¼ja–{*ew¦œ®{MÖ¹ŒŽ4 ÞQóo;$x¨˜¹á3 U?+¾Y¿‚hp<¬/áÖ­ˆo"}FªÍ<± ½®šö¬ü¨òçT ¿’”Ö!Í Ùdƒªå,}Ýå FœúMÏÝ—+ÆèÌ Òd‚õ˜<‚(2ÏÉÝ$±Pµ¤^"¶Èt~ƒá)žä°¯nêì¹ñ7¹ K‘Rø¸Dä¨G é6öO8gÈ0yÜ› AE—"8¦ùãê>{‡thQ¹Æk»MÉiáE{"×±Ú2ÊjúÅa—`D:ÊC6€†:˜SÒÙNÎj¡·€ÀBÃ?ù Íê0/Ljn£®˜W¾—6¥ÕYZeQz$î¶£C.A,ÛiÎ[þêCâNa×;~¹ +å˜ ÿ|С»ìÔ#»kóñ§‡¯z™`¤ÚCÄìšLÕ¢ò§äêÈÄõÇOîß5tÊí[Z~•9Èä }Ö6a·Çxt-£"Hß:&âLUºp78¯õ…(ëOÐn¯ãîgËÐ EmÙ¦MDS”½Úâ²~]ÌàÍî³Õýœ VîN÷ wÕ]߸™žºì°ŠáG4êÆcú¬ä&“]šgÙ²ò+¡HÎÚóŒýדL¹mªV¯%=^ 1¸z=›sä,‡ íÅé|m¥äµŠh+Áwöˆa?p.<2 Ä1F³µâ}ltÈv‰#ØšjŸe¿kØ!'^ë*”Åö\¯Î£ 8gJ9Š¥·ß"4wß´ ­¦¥ÚùõëÉǹz¢Éwtå´¯S¨"Y¨IØðÑñV’ϯ–©œ™û†ÇŒQ„p`…›2Z=ŒLʵºó¢1ä\ÑÆuDãM|ùëZÝÑ~Ôñõ®Ï)„èûK­%ÊzlFZFsž¦Zž`¨ˆpi…zÁMñºr4NÉt_š¯eË n}ãæ¦a²q°ä9ýtRMé>^f†D]^Ÿ4Ù‚¢ê/Z«¾]_•iaó¼÷3*j•’¼ñ2©U³]ÕÛ"BœÓh‚ _ñewàÛÏÙ½•Ðó|šhœ ªE¥Ì’þ³¡8ÈLÈÔþ‹Rv tú5)†Ø%ðRý'¥ ڇƳ¤¬sÆû³œ ý‰6v»eÔ³PH2Z»èu]ýs1˜Jc+í²bt™°JT(é'’5&Ÿ‰_ðÂfŒÆ¼GNG‹ïߪ+¸Ï\“Âëðµø6ƒ´éçáv)r$ì(ˆ°½LŸUh!º6º‰š“«¯ÍF|˜yw.e駈Jâ «™„pf—Åú|o¥Ê×^ù«²¸£¡SœZ4å­hÐxá̈†D t]¢°Ç§™4ò{Ùe›É.ŠÓv¡î<íœt³ënÐÄBÎ8YO·õ¨x$Ä9R>@7›vÓz;¶HÛák«ôÛ»\~|9žo‹Øëú¬Œ”e#̈€gJÌû…G—åÙ; J¥háAÅ;¦¾² £”DÄâÖ¥ JåÖèeé³ZüÔU.㇟è‡F7X¿‹ç'%‰S'¹~/>9«ÉÒ䉰6 ÖÌ:P@GòRØâŸê™'~õ‹þiOÊ­¤|ÎB+îØ‰1^ì¾­,xÔ8G­­‘í@Ìfž¥•< µyµEÒ}޵œcû{…,Aóm¹_`3›¥ªýwv)ã2¶t²•l²íƶ©ï•d¢‚–uöã™o) º©Ú¾Ñ'«]wÜ«r·&Ô˜W{Çãrtó,>“²ÎîIúAmw£H݈ͱNë¤ÝHbÖ¸TŠLq%7é#,°éT;m{”=8D<+¦¤ñ³ÀÊ:¸À£u2øë4; •ü¡~Eî~ÌEcú®3ð#eá[Þ¶<?07€æ ƒ€–Rs90ý®¯Ó,“†ºÅ´IiYznlz#x`´jlP³ p“§øRÜyø%hè‚U<É3/«–OÖV7“`{(ª%æ¨õ¥ÿQøuv RÿÛÜJ¯›#b»4ôò˜Š’vQ¨Ëë÷H.£Çl=PÃÇÃ7&}Ÿˆ®ª^êMiòU;º7“Ox8ih'¶¯Æ¥gvA«fx– éöäfBQÜZÑÚ ×ÂâŽQÂ:ÏÍ Œ<'z;¢€Ú;ÙÈk#hÑÖF$¹}¾P¿›Žñ®”Á)T L…9 ó¢È=¸µ³˜fS|Uv×=~%†æNÒ‚"D©0¯ïa€’¯OðÍhÌ {`¡S߉”§Ûºe<<ƒÁ³§(•#s~ oa) å›Äl"În¢ÑòŒ*W uÁMœç‡ÇÛºf•£!.–Ž~Ögèsþ©æy=åÔèó!Û¯;bþ$/¡äœÙ{†ˆ(I~ƒö™Ó€¬— ¤+Ùà¿·Ùâ}8Ó8ó²΄òüæk3—ýy¢xGÅçEt ®,5«†€!Ó¦Øg4·Ý½n­<#<´Í<ßXÒò[h“Q¿ ‡u³¥ÍùaÛ·Ö¹^Òß310# šÄ²ê/sN•!ËdM²”"*³@ý¦¦7ÓbIB©°>ýöG!§‰O&=="}qÕ~¦·!(Á¿ ‘iy•T–~ÃkEÀ÷äï:/sÆ~òγG)¯I,~´mŠË’ $Ê÷>1M“ÔP4“““º}%G¢áGöC$3[b 1}Cw¦¦Â`;²Yß¿8B/B 3ë­ã?J€½ùÙ9MDõEžª„åË%a¬®Zƒ™þdþËp’ &Ïä$VH[ßñŠåŽ,'êaâhÀ©êQ¹®ñCŠ6̉Z7=lUø6žÙR÷âÁOí7_jè¶8dÉÙ“œú Ë4óžê‘‡[EB[]ι»aîä¨Í’W‹ ^U«ŸNß³MÐɆ 5c #¿Dލ»MrJ ´LÇ›—['Â~nRÙæå–‹N•m uHRܨ<9†“ÔΑ( vKªðŽ 9£PqØNdƒ\ßóyÂ5À!~œÂ_Öãn¿GOÌQb@oEŽèŒçœ™€@Q*ïf7è•F½~>Íÿõ3’ü‰á&ÜþÕ×½Ô‚C¤îÈlŠ#þ—›°&¸[%fß,1›}°^²ó ­{»°áo'zušÐÓš)EeÜAÑWŒ&¯nîîõ¿ô–¿&£d|]ºpüáïÄí£|Sü±—›Éc¥iÖÛz^ÖõMJ,=µÑ/NpðP­È,-x.¾=X­‡ôîl:eÂŸŽ´º V’C7¹»ÚÁŸ”JsÕüÅow̹mµ¨»”VV¬_4« ‹7ÈëÀÎë…rZn¿10gbM‚r^(’î+íY~ü¼jñÏñ¼ñ` lk0Rð„Øûˆã<Á-¨9—X‡¸í©Cù4ŒZˆÝ³É’Y9Äüc_Õ£š}Ò mB<7ÀåeÓe±†S÷´úúo7U' …µ’V ³Œ>¤çÜj"PëÚDÀ#$ܪ)ªrÝ‘=‘»g9SÜ4âüBÄn>QXPö!¨}í?¿y(sŸ‡œ§ øôÁÀ}‡ðe2Knâî$~‹êê2b)¥?NAG4eäK›³A¾6ë—í_ÍXûŠ vŸóꃯó}t”žrZÇ9‹Z,úIŠY{xŸ‹J®jʯƒóV€§†y„èŽ8r™RøÊ1Ö Ïa1âÌâ55‡X…˜µ˜º(G÷Û™áââþÒ>˜s©¦X+KÒ­¦§$—ã艌}ø•3×¥èÄ0j¨(ÌçâgÂ0ô‡¥‹·+­%ýtðT#ìñ0ZWHÜÍ ä‚b…Bú§t]í´®=êí X@ž–ˆ1ALnQl;Š$ÏáÅà\Ñ#Ãk*^¹4…|µ Ñ1 ™ÑÂ/M43×9!ÍñQ×ü*|‹ºG¤kêÚÚÊTÅÿ4P+g9wx¹<Ý£ÓƒJȾÌÊpîµ/ÕßÜÖn®ÐÏîX Q.e:øOí­P(×?Ù¿ùBÁŠ€_üÔµ«uýÔªhea–•0›‡(ñrQw„)Ñâ†lnÚåµ§qRÎô$ž¬OZ·|A¯Åña‘às óÔ°üGد½ŽìPV51öŪŸŸ7TC”}˜]öáV·5Í ±Œ9‚€\“f’t£,([¿M a1 -øÈnÚÅJC¥¨Œê~0$jd·XÙÕ HC» êá=òsôã`äçÕË TÍKˆî[b^ªyÍV/€Ö¶Ë jÉ|Õä·1¾ßº¥r嘚écz“t¸¦[“•dsÌu3´Ä–l~o°ºn¦·¨Oàv§—Qµ‘³‹ÿOÈ7ø*/§Õ7ul˜Àžƒ-;ñòËçÔD¯Ü~¿ é·ÑkÜ×­„MWÀD°²»?D(JÆ;ô£‰)IךäoڠȘ‚"ÂÁjÚá2vJÆO1'çªé ˆ¹æ>&î…•í\ø=xFß7}i¥B˜1DðâÚÚ ³i]ŸGs/=ôýbéÓ+˜ÝkÊ<=ÉùÂk'ø»$£Í(Kñ’—.ëÙ›Êú7ݘí”s©ßÙ~"lÅp%Ù¸±`e‚,¦¥¨îúêÇàdÂR?|êpԿ꣸?;XíÆ¹nn4Ö²ÖÈHNÇÜÕ˜{Ê>pPü Æ:­‚*Q™”H§°¯´î¢aÉÑc“Hƒ¸ÃÈ+–F/aëçâgUˆ“’êàýôaˆsïãéΈ=hÆ1¹6Œ¬.WâÄ.­Mˆ~ΠÒC÷*!Òáï¥Ø Ñ‚(ä÷YÖ"†EÄ!!( ×FhÂEð úSäÊiÃg ˜RvZ‹ýtbHJ¹9à_Tøg6úcgJ©öƒˆx¿ÂV~ïÚE• Š¥2³o¥<ˆøëÁ"u¹âi‡·]~sãÒa-¤´!|@49)1\ª÷QÐ_?!})…²LJ£¼—z0PdÚ4ÊdØ åÝNñ?½„ÚmLðòë €”˜Èâ€WU×¹ZëîFt¿¡Ï©álŽÕ (³ ÒýÉØO¯:!iü^˜œNÈÞNUgœ}Ê5À‰=x¹;Rw—ñ‰˜£Ä¨úq»F©7ZBbÉF{–Nº”a!^uöÖw=m̆‹ü  !ê/'f“¸ìƘ:åf†Ü%R;äÿÂ4Š±Î¥Dä–(™U,”ï ¤ Y I¿MŠ0ƒßRv’½uDLà?5¶iê$5?ÀKÛWàáµÂùÀÛ@"õ—Ï—]êþXp’ŸJlÐóm’f][æÄNÛtÅàŽp.p5Ô( 0+Ôû›¤Æ!'‡‰…¸¨N#,,þÁ”Cƒ´ô*ÅôH)UC±”üuÎ ½„¯0çGÞ§þ¬öÂÍ(âÔÀ«ùÄÿ—û¾‹ÂKßJmüSDG`‘Š_\]ñWI96ôpø˜±üò͆×_s¦¿ ˜¾JS[“»žïfY‰û>Â.j’gºT;´Tݤ=Ï—¼Š1_år4 ˆÁ¬pd ƒ!«jßÉ÷òÖŒ÷µ‹™2æbr©zcØ%¯­Ïuc¢9}¥ÒT«‹!|#Ø’ˆ6i=Øç œeª—:†I½f£¶ß×k ²Î∂pwY{€dÇs÷¢:îX·5»Ra_gÛ)Z³úN™Ã*Ö‚þî/ d™{Ø= FqÊ÷_¥Ô¤$7ÄEÁîçw§ü!Öm¯OÏW¡[ÌkôRÄÿƒ¨õ¹õc¥%à:Õ©>žû~ü)Dد0‡ˆŽç3mʸO² ë~+rù dI-ž/èýËäƒ\y&¥©·' Ħ÷ÍärÖÀÒ¿ %ï.Ð)ùÃZ)t Dc õ|v‰`Fª(¼‰\¥…eMxd¿ôÛ‘ÏŽõý™Íý=\‚®›Écaup× ÷X< 1#½ê„–pcñÉ-B2{#‰¹ºyDÌ@> stream xÚŒ÷PXÓ ãî>ÜÝÝÝÝm€ÁwBp N°à‡w'8`Áàz'»ûn²ßÿWÝ[TÁµß§þqX5~#»æoa×ú ìÚ¿„]ç7‚°ëþFv½ßR»þ¿ˆ’‹Áoñ3ÿqBüÌ!ûòëÒû×’…¹›%d rµôpüWÎÎÁóÂä`üWÎÅñK I›ýïøÄýwL“Åoñ°0·´ws0w³ý#>×/±ëHw,\Í-@k÷?ÄÜÿˆÿÞÞ£²ÿ-¶ºÿÇžŸó_ùÿq€4Êò_Ä IÑì™ô ãú%qtüݰ_+Àjõ„PþndÂYÿaàù¥wñ€Ü¿] µ[ÿväf òü#Æ/5Øã&°ALl~G„èm~½áÀ?M ‰þî#¤=¶>ζ@§?, 2Ð’©Ý2ö@H'~gÌ)Ùá׎ÿÖCúöÇX@.sÖßTÜXN»á÷A¨<-~ÝÊ6¤yfXÁ¿“†ÄÿáÅÎ)Ôù·Âá ù.àôŸ“åbÿGúßs…Rdf-±mÿG{Øèê<> µÜ¯^Yﺾ²o£s[êÛÕ<Ѝe_™cµß…”ÌPç[dϾ¤Dpg&EbÀ9õÆœ¹¼šÆÉx&WH`D 8Œå,ò3Xãxw;ë»R¡ÅáÖIHEhð’ögtŠÆOb7U`Þ¯´øíªð|= Ôêh¹ÿHÅ‘€¡’<›ƒë"¿ì(U@[kˆ^rÖ–¦™3Ã'çŒù—ŒÖ^^2²ªÍŽ&Ûƒ‘È×Q®ŒVÊžqˆ*>~Ûë‹p—ú—ŠGŸ& }‡ ­7Q6^,7I¬H=Fºà)#\lóuúÚe~¤ªõë±›8tžöÞöÖüÒ_.}ì‚X˜’‰…[ø¾‘—z(Თ˹š¿Í Ù¨‹ÞpˆpIFû‹ËÙö×Qþ¨A:Ÿâ½¯—IƒCòD±<·N¹e‘Á‹ ŒŒ7LI¼¹…sCeе7¯Ä¾YU‰MµÉB)Gî\w™–åß[a¿²aütw Ü´+rðnÆ ;Ò<¨¹)M—äÊ%Þ9n}Ö¥M!ƒOý…»…ù‘}IÐøÄÒcE†#ã4y±ò¨Ý\»³×Wèo ¤b¾´u¶·nŠR1¬Ì¢Æ—x>¯–éµÑÈPüXg=/¤9­ÚÜùŒWQ$|Y¶a8JÒ“´h\ó*0}Ô`ºË`ÁgØ{°úí§ÈÚ])Äé=¨Lœ†­ÖYAJ~’¶pµ€Û€ö„ÕŽž)óË9;ÓÇñؼ¥9ò†§íX“ý›~¯¸¡iå¦ioÇæYümýª4¼Q‘Ãet×-ÜŠxgk?6©N±òܽlAã}Öêv[ÿ‰I–› q¸ïC5Š3°ŽYW&Ë4ºËÁ1+~dM§Ž2½D+'å¤ÙõiÄK³Cœñ2ŠòøE¼bøZ¼âËÊ÷ªjoXß­Ä¿•fEèÕæ|J¼ÉÁÛ¶ëÓ×»”ž÷('ÿü{ Íù[¼„üçâõü7šü‡y¼Îê_b¹Ø,¡å2ff¹N= ѽô¿ô¤¾ÏÙÊæølè>ùuh8uéÃÛú,QÛ‹Œ7ÍYëO ‹¤0TÁ(VýEfo¨jáhá™Ñ!X”¡ygéß}ôמ:éÿxðÖšá¶Wª¡ÐýkÆ*­»$O¸"3‹{ìçç FâÆÂc;Þ.êØsþî 6=!ôTÔˆ+Ô¤K‘öò¤Ì^íu| {²»ôDèצ•1ô©‚`vžŸdL4DS™³S²Ï»‹]ðÃM²(îßÂ0°Ûx]ïptæs±çå6svˆ•oÕðú~3÷ÝŸb'Ù£nbYË8ý#íªOÛ:Xv½Ï%c$ìd×αñeaÎo7Þ‹-öáft—3Ø"WÞ82ëM—Oó'w£?Эçò?.ïÇ$míŸß—ZÛRw8çß ÎÈUÉèhý>ÆÍ~Áð*ÒÜÖfÒòI=ŸLoÔqLŒwn]ËTKÌ–‚§c[ŽpMà^w¥ç" ,>Ó¦ÄWF`@«úMɤG÷˜¯gê†ÜßLr¯dª9ŠÏ 2æéÌû® HÌ´Ä'|iÆi¢…’«æ‰BCTS³Ùµ_‘`|­¡‘Y&Y$ gRÍýÈÿêBühQt@â€jgy€~_,ñ“@ .í6l$Ô“DŸl!³kâ¨V~DÊ,¾>(3L‚É>¶t‡+h¼\š2Óã¬mQíî£Ù‰ö”‰T=]Jå4-‚cÆ)ª"-¦âÆ4:­H.v–ôšš “€ò®ßMNY 1£Ü5QæÓY|½XÚào»—A2ø,.¶é=ð×úĹç÷¡æe¥^£‹*UÚÎc%f••ï•ùk~˜â)Ø|µð¢ØHCýìÖ2¬õ5ªRªÖ"tH@×…Â8ÔŸïÕ–dö¼[øñ-íV·Ùš­ B7š–Vœ|¹“\4ÐáGcö—±Äów×=yf8+Ws›!éÁWó+ÚR2ç¨U :a¸r}ö–í«òè<펩ŠRÖCÕ;x-j3šC¿0º—Š},’‡ 1Eþ‚o¹>f\Ï é‡.oSn²¨­¸¼ÅÖ‡7ï{™.rJ¬6¸i-F,V\˜Rå®XªI5»|}ëÈ**N×½²çðˆ.cdMµsÊÉ0í]6÷{3V¬°0,ˆà£@†Þ/©8ë­í˜Ã@<监öãO`Ì`E¨CºÔ?q¢I7åMR3Q6ZNÃH!–?ÎyN©É×¥ºû%öÏ\eh½‡q»x ¸Ÿ¯í¹…÷ûi2õóAd‹^?#Fü J_fGxJVǨ}7eàj¿Çî™É¼ÞP@T¥è,òíÏèù ÍBÏ÷A<ËÝŒ1m¼¿¸ŸŒTU‰üÚÏl›Âÿ)¨Òœ¡jÌjG5‘žÅ]žÄÖ%aþ)ŠŒ 6Ïå8¸µ6¸Zd'LåÅ€6rg?ù`Ü/fo0¿ª{£!§ì)·+ìÏçþ…§û>ÄÕÝt)¥¾/Ÿßù-™}ÂK´òJ&öŸC—UxöemÊÚ•£m7  ‹^„ÊXP/ä‹-\{×o€5õºIˆwÕ¯ZÉù;vϵ=5.Îú®ýð2çë°Ã -pფS—H“Á³ë`_›+A—¶Á3¿tYîÜŒlÕºGÿ’Èš˜Ð¥}Œ5´p=pÃ{#5N3Ü?ËšŸ|¾B´SïŒÅcPÂÛZÖBúÅKWð><ÌÔ‰LP$¡do¯Øà‡ÈodcóÀí°ç_Nó™8øëK åAs†3TWѤž¯–Eyµ-÷‚ÆzË¡h›`ð"šU0'3ÆÙß¾ß)ÖýÞ_þ„Xºø¬³Œö1]Å‘ÿy “‹;ÆG“nªûiu½4½»ó e¥ïðXµÛ4Ù¿ÂÒà‰ÄW¢pûµX“A°8ùJû횘ù wê±…hüŽåø‹èç!DýÎð“ã¬9‚è=­b‰z8ÜÅX~íG™}…jQJCgãnÔ%øaçqÛ· ]y㉥gÚ0|Á³I¾ù;ßÛ•"Dë‚ï`’Èc«.ïòuŸ©Gõ’Ã.á¨",†ø7ëeL¬ÞKŒ“Í)hÐAó2k1qQdÅNùèC™Ñ*7<ÒÁ¢V"U +ã–«‰¿ê·NÖ¢´&yK ' ¼N{Ò+¡IÔhï•8@5.åP Þè…âC;µ¥ç£}Á*aŽeýú*5‰‚ •-ªáÔ«IY¨/V Ú÷ û*Õ‹¦€û]¡Uv»-Ð/ÏÎ#U;W-º¦¾°óQi‹És<_ËC}Ü"°r.|@Ú ]?RJ·©9<2ÆÆ’ÔQýŽý;=ªÕ=~ÌëW?‡åÆÛ‚ÕŒ p¾ 5œµàk@w<¥<즴ÊÃ2%SŠff'…\mZHäNŒ>Ìóù/“Èù¾rb$Ø*‡†âÔ¿Ž`ɵZíM®7Ž€—ÇN!*°öb»%u ßýYϾ(uËÔuŠMØÍ ¡ïû\àTx`xÕ–>íNê ÖŽù.)¬÷P5ŒÇóÒ×£0^Ìâ5rL2Ȼ޲ÅÌõkç :†üá>NaÜR‹©6R:»æ¾¦üÔË-}ªãp3úÂîÊ˩ޗóðoð;R°Qo4pŒ'eä«´ì½O3íl,rä’¬XèPº6NʳHXÞN¤Q:»t”]ˆàUˆ˜ìùz3-ù™$ŽY»fnð€«š"Z.ó¿W¸Ë%i-K>NÌRT']6BŒùn©ð|š›$¢ÀJ®èÁ~ÂÖT´™›¾†Ë×Ô· 18wewîVnø™’Ð*¾–mïKîC¹eÇ‚º›s€€}ŽÒ«rè7›Æn¾´ƒ[æºâõe"\/Qaй=V…È´Îï*“ä¢^@ó•ê¯7á;5ãNNø=Ô2‡`~¾¹CÊqþ öp˜ìÞû¢ DÁ».…o~pZƒäÛ: ‘ß°™Çʳá‹(bò†’ ê½ή¨¸‡pÞn£YW§Ðò†ý§˜‰óŒÇ<™JûŠO¨uðçíªvi_ˆªV—¶ëuD³“n•guÒbèËnÒSv­!–)œéëœdòÕv²w="X½RPbÇÅU®Å¥ìË´(Uï 9io±¶lšœÎu­ÿR*dã{’–À­_­8!¢¹uf|`…"UlŠÈ=+ç¶z¹ü¢Ÿõ|£5fÔ^‡dÅcÛæGPòc~ÌÜ1V-—CÊdò–Ømu‡©ªüj /aæ«_¼ œ¯³•ëØKotkâü/£äw8¼ «Ssg7aóÓ×õšÙ7is‰ˆ}ý[,Ц-íÕ,ûC PØòk»{nŠÇ|‰7å§+)Âе^7Çh”QM3‘…–²æíJ@n„ÐH§#ðuÕe <(#{i_gr¥-,õ2e­Š#õÍV[€ ÆúŒ±.Ê … M٭ľ˭Bß}B´·%'Å"Òô?DçJ·Ž¬:zdGŒóܨîJ³hY4`϶¾Ç6å|£SPL˜‡POÌ¥±GGŠ_øi²aÿtý#8B!ínMÇ‹]ºÛ°ýI9%ä!±íÈq^+ÕžÛÃa.º1æ ç„ÕË•9nÔˆžd ”ÊB£dé>{óvü*òFðéýܱ¶³+˜ÌFIon(‘Y̼èbª¶Qu¢å{1ô0XVYEA@$=A+HúÎŽˆÜŒÈ¢%üinÐpØ!)®¸â½¥Ì·Öú*–J©Nœì彟™ttŒ ~ÿMPº²Zi¿×8KοR3©»¦6² ðêr°±£äôf„´¾dk§¦³­³ÌaãòñmÆ&`ðºô½ø†ßjéÍɦåëùš¼„òR_5õ‘išó[V ä;*G q¸vC‘ñ`¼¾x˜ö•À¾$a[}ÉYdÚáØ# ˺»¤~vQça}±Q€rF+¬Wж!:„ëbWv–A2üîàýô'ÆœÆ|qœ)ÒIׂ¶<4r“É’üsŽ®ðþ=¼®Ÿp~ÊÞR Dž+¸>5 }§+·‘5éî­¯ ¬öVÛC0 VÜø>CH妧.5’DyÓœL…'jÝÄK–¶ô~5»%Qoäx7j‡ó!‹vƒQ+èÏ{˜ë}Ã/Óž8‡0œHÁó@=IOm"ÙB¡ð«¸c’&†ó‡¶y€,·ÝÆ~({¡Xø7váÁSIN‘ÞÌO_£~¥¼†ºÿ´ÖÞ/HÄé/žà+³®Ïu¥‹¸ I"7œ®°^’³GøŒGUbaØ­*ÚsÖ'ø"WÃ+rµe@º’ûƒ(eŽî–°àl•<Ïq,L² ­‘Õ›]ÅÛ ·Ž·„~êâô^D ûîˆzkï^€8=ÞjàpÂheºp'Xø“Ü% íqÜwòZˆ„‡äf)éͨòìܳbј OÌœ}©ï¨O(%k…~qÆgóVšêR–)åyTÙÌ'@v¿8‹`X”Þ2qþûÏÔ÷ϼ늨|Ã_Þ9@±,£Á€/É&ðf=¢6lü"%õ”dì{ÅGF•Àñ ùF4M7ì! y­¦·³3žç8‹À݆|rd6{O*ÿJÐõ!›‹óéuo¨)Wð¦ÜzT]†§ïÙNfßëS`ÔâWœYéÀ(ð£Åuz«h¹mµ¹÷é 2´n†õ1|ä|è¶Àå-IÉ‹‚èªäK¶¯”®ï‰Ý2Ç5%«¶a„»¿ú £ÝÎÜϘQ0³SÕp+%WÆÆ–gyŸM–?†b´z•…£ÀL“!þª0ÑgónµÑ’¡Mš±´òŲŒ®“U„rÀ„†¾G†…lSh¥çûKQSe{np/xïIinÝë¯Öy°«G²Ý"3 cQL¹Xyé›6öCÆ0Ò|¸M¢°é¹ fæQ*¬fÎ%˜;ã{ ØÒ;÷d:VÃ^±MAÉâU(csWžÍY½Kô0Ýf&˜Ï’1o  Tñ¯¢Õ£õÍJwÌL%ª×ÈlKf\ÎöpùÐ(‡XÎ'ˆ;z;””¯+Nv2-:’‹• ÓÌý,ÀŠ™òÛNSÚaàfb¯YÒsÎÄ®ÙXÿvRQìÓrÚ»˜ÛКws`ù9£^ÄoÆ 9-›Á˜XCÓUƒÓC»’ªOÉÜ…Õ¥´*|^˜ÊQÔˆŒÒžoQÞ S†Á6O—| ZO2/öÆœÐG{gVçˆv];ÞŒ=?9ùHiá¶raê%2p&í)ÍäÜî~ œ¥+ªµé_ß¿ø ¦:Ô¸mzÎmxZ®¸ƒ¯Î¥…ÝP°´+ã,µæ@QIlà””ŒTÅö¤ ¬å4Oœ~9è‡ww§<Òö¦ñŠ&@iÛÉ#»8èe×·\ÃÑ5F–Óp‹ýR*÷«òxö}–Æ€¡¹é.Ë©‡j¿åBB™ž‡×ËÍ«ø£¾s‘Bw¨cPg©ƒ“V øG]¾¿l¡Ì²uoÌN§òÙ›,›Ë×9릾ìžû:#òae“ 6û2ˆ\­P"±I—Ô@r¨?ójξfH0ò[Ý^ð¬yAkèø\g+–fX-÷xÊ5sot(ÒL?þ"sW&A³¼dUœû`K„ø›ôUƒ¾ºˆU„®ª t²H¨DNé8<›äxŸã øA›Ü«ØR*ןÈÉh½”ºÑÑ¡·˜p>ÙQ¦ìAézÖù([X{f¶Þ’Ð0ÍFÈ!VE¼Æšjü,kj~Ôû‚&é£Z§ws=<ÎË÷Ï…q a:Ì‘´¼]_PÃÀ{ªý;‘9¸)ãúüyÏ*µ‹Å«·Ó†d°¡îØ­¾S^?§l¡,‹øS«÷ôÐ4ùqü²0f³õ+¸ì_¸µœÒR¹2fº¿ŒÜ楣_u¤‰QÒUŸAßTâM¢¯¬³¹ n ‰˜ÿ™0–ÐHÉÕùùÙ…%ùȰ‚YC <|*ÀKR}iG䘙‹VFÑ@[ ×ÇÙâ×K,dè 8þQwGxà¿b’áÖ:$k’¦ì×Ã/Ôׄ7E3Ê7µ"±é.´¤ûê N×í2gb@7VÈv ñ„Šøã”7E1Ú‘uò)õÓ׌ޛ¯îEôà胞‘:¦…õ¹Í·õº=1eУmE嵜õMlõÓ Š±uf\Oxv4{®(‡/ÌŽËÒ›I²º¬lëÅjPaÀOonJBÜöÝa£-`QUŒ(Øüçi\£Mg1–ÖÖžB‡ÆJÆýü‡pÉŸ}ÕÑs²…ašڣfï|Ëøbfåã¾¹ë|Ón,2 Ežêú2'ìRvÊáùW·ÅÉW¸êë¾zú,êo9žÓ>蟣± N7=Úóž_››:ÎÚ ºªÙ]ªà[ŽbÞÕùÉ'ây€øö­çW5Æo®ð´jƒïME$¬›ôÞ ž/ô~{˃Q²{‘{>œ$6¦­kn´¥ÜS`spÉx£ ¯ðòß“iK1]ÑÎù映+åa®¦ÓªüY=ÍY@f…«è°–‰~T²5ÍöÉ2 èÀ|IÍ/© {2Øø£&ÄË}u[£.0hmld ½àíðÀhîÿ¤¼ÅôÝ8¨S =:ǜﻀ¡V4÷u[ÒFl´‹"ÌðÆKÁÂy ÍÄiÌSä> ´>·®¨²Û\ ^'ky¥ ×öÅ|ÇÒyÑ |.Á,š˜2ó‹…1˜^A¶//ØIœ.¨°ûßé‘KׯØm‚›$œlê„¿ë^Z{ÇcÕd‚Ì×8»'sõͶkØJµ©*F_ÜMYLF:òÞvòÓ!ÁU‘¹þ.¾*1ãüË>‚ù§o¢Í2 ™++岈Áº³&y¡Y}4ôÎoF3Þ7áre-жN©U´ÂуíSi¡ÌíØGbi(Lò"k^œ$¹fó°œõc½äG:Õ Ó© :жÓ?Rú)G¢TÿY¦@ݲw™>£hªdÕóTIb /!!þ¦%l “‘Ǭµ­kõX&«:ÀµMœåŽšïÕßôxüϧjÍÃ#ØþÑ7µ›YZ¿ª ΧÏ©¬±!…® ÌÞ¶`¯ÕoÖ&Š2F¢àˆ*ï~ßûãÓ±ö0€K›Æz¦‡DnT0}M½2ñ‰{@#Öté%œ…µÁãÇýV:"K<’²…Qmï¨Ò—¸ºˆª)„Z§Dƒ(Re>Ê›Ä4CVEXÊ$ÜÇÙâz¯©Ðã„Þñv>o³·ŽÛ¯<Ûà«O3—vùù²X¥`dñƒÔG̨a#éólûáÕÂT5¡æŸó…§ã H6ŽÞ ¬Š<ÝšWFÊžŒK¢-á lï Ϧ 330óŸ™Õ¢«š¼³K„…}&¤ÝlƒYl¢ý¡ã`zvóPú`%¿Š@9ÐщS^"[UÏ-Ü@á6®@i€V—†àY–-,Ïò:8_=Ž\ŸíØÍ¿bE<xyõÎåî…M-*Ú˜Š@¾vü±n6+@×TéU¦Gcñ¤J€ ÍȫȑDó·&·Gå¹ã›ö=£ëòß±FÎÒf¶E³JrŸ™—ØÔ(E\—²ˆÕö´fßû³&2Zo·îa)™ÚKr1D>_ˆâ‡É~'’§VQ±½Î<ˆÔWÎCa·d':Ï+ØöÐrÞù~¯çé­ç4,¢Ýë Y*i(~2 (,° ‚ÿöLüÀÀ WnŒ€~æÀvf8P­«%pÔ}„5·Ï䯎lÒäÞ,}ÜþŒFo62 J`Ýq€³ûª}zV½4ßxÍý#`æÆ.èèu졯bœ‚ös‘œ¾]à«fΤïsã®ä_¥HSÚ %c¯8EµqtÕ÷Hâb¡l#mí»¦L›I~~vø¢!§ØåÍfŠ ïÄñ`V‹æ ‡GÉ…øE{:q’¼ÙBÙ_Ù?’ ¸@Åúó$”+pÉ´s2«ˆ2Ââb…Á¯†®iîÍé3.ÅÉÑŸ¿¬ª…ѱ|>¤Ãnû¼ø¥1JéóÏäçý=;Á˜R³ÁiŸ›áÇÇýÝÏþådï{š[ð/ã¡[ó¿iÇ,2Æ /¦$5Êï3ÛGÚ$.=>{Lg_d¹Šbêož-csô÷ö[í~Ÿ¼µûcÍn„Ù—ÜòãµL¿¯gß‚<âÞÒ»/qãîˆæ^³ZmSÏu oËC["º¼Æ®D&{[D4üE¿ý(Eæå?Û%6ÀT¹¥ö0vÒ&ÕôæLdÙ)PÀOVò–%fcJÂ+°½.¶{}•^¼üÌüÊI´‚1½.ÃüÍy~î^äÍÜÊ*ö`›Uïæû&$LkÍ3ÓøËN[ o|þZî…"Õ;Ø(®¨æZRëIA]¤´"&T厼ÔeÊ/'…j‘%–:ñ•K{ø /fWS^ÎûÕÁâh¿¨lÄRCqÿÞµ"ËNÞ¾‹åpóÉNBàR™pƒ’¨ÅÀé> ÿ‘«äú{¤›ZP‚ ¾ÚP|ˆÜNˆu³ lÌ„.¡õÅ#·Ì³t'¤Z5³ø“Œ®¡¿Qj%üÕŠª—Ósf8œä5WH§YI¾9¡Á9d7†ÓGá¨Ù-Ù_S•ÄØ˜bú±À,LÆ]¬ô^Ú‘:;%XT]/o•´3 cF±W²©–3úç²ßüP¼!gB{Y¦qŠUKð,9›ÿ˜šŽ»™»z ü7ÛËPµ³U–À¾ó%Àä8}À!¡˜5R‘qeÖMSÃUùetÅžXdƒù¬Á®ˆ¼ã —Üû ˜Ö"þo‘§DûÈ+H29]:‘qµé¯oÈKnŽnÆI„¾exf¬ñ¼…öjdÛ÷qB=)â‘à|/ÐW^fxý”Û%vpÊ3e øQ~yèQ¬oçãOLkœ¶û¢¾6b~«¤ª޴НË-†­±n}”Ð~ ç*|*™¤ódßCºÚk-î?õ¨ÆÝ´Oöa»WŒ‹ê¾AM i ³8»>¤Ê²¢}º¾,w™!ËELÂr¸ƒ T?®á;¾b“f6¥eY]䨾/ê0÷#h4Aµ,~—WÕª‘Wbrˆž ÊŸMˆGG’í¥Ÿ7Ä3FH†a[ž?Jkâ>§íQBNtšczƒyâø¨­†¿çÀgþÊœqW'}ös—üž‹=^×NJsßÓœøm»¢¾Z½û '6 ²WŠ?µm²ÈêxB톖§a¸þtfnÔ­óÑ›;Æ5âl&ÝùLs¥úí=Q-ÉÔŽošÚŒ«. ¥ÒGçyçâ¡‹#¦]SÇA›qþä>Y¶‹ÿ{Nó41EVûÑW‰â½ùÁ,W´žãèj£èløY΂µ¦éÔ7LŽG–Ú~< â^ª8O…ªwY—Æa«–Y$g=3ñaû7ô ŠLúÁùçÍŠÓê”ÈÂ3"•·øÝØíù•KZŸ¥o›—2vmT¼¶=|¾|m”¾0<µ?ª…ÍÖhMqèT}¯\ÌXV*ݨkI…¿²@·Ü®ý)AÞÆ|Y´p·š´‡±çøiÌÓÜ&¡7÷KpéàKt*> N  PÞ2¸z— =Š‹Ñ4Rìøá½^서ýV‰üŒ¥¶J®êw-\w9µFžÈK moö`YÃ!$ ÛïÂï^iiøÐ³°X¦–ÔǼvÐDÈßàP´Ì¾|µüö¿±ÊŽŽU»Y¼ŒKDÕGhðÑK£f .t™%ŽÄuˇAèb‹#/¦ãkîɺTüÕêm9G®‰CÈú‡q{c“þèê\è­}BÝÇ¢æ©Ö%%)tzŸÄÖ=ÝŒ£á:›•¯5hB™š>mx‘ÆTg ðà”çì¹ta`NK+?L+a^~¹Íô!Vò¸äÇM‘ÅBô.zˆ¬6µ¯'õWÜ0Á/*E"ñjù6º/Zë·ÁLoâdéb'hE„fÝ]¸—·O/ùe"7¤n³ØÑÅœ˜êSŒ3á{y¤$˜]µgàJV`%»ó«“Vä§pYâ´n`Ë ¼©¢Èp¸×ºW1¢h†æÌ ”í¤¿V/¾XP–ð•—ÒÇP@A Þ¿FbãŒýF#òœyñfUè<=Iï‚} çã¾0#ß®rýù´’ïPžï,qúó3îMSÌ]„qóV|VýwÏ®U¦q”-\{Íа)j¾8‘ ë›0ËÎ>E‘ȦÙd¼|¡ò³\_mv"ÖFLˆÑ”Wž+„÷™VTZΓ$Â{³Ä0zûàuQÛÔWr4±ƒZÌ ì„S³s×K…;‚ “öPÒBÒ8n»\«ï~¶Ó`cô¼¹f”ÀäÉ`R¯;‰*X›ŒÖT@9é­Ñ†ÇD?‚݃õ£×}-ˆ`©šø÷ e†w³œ»]ËÎ3ê9F™™]úŽS.©wUäSØ^îòc™Ÿ¹âƨ_=ã{m ä‹C¥ßÙïÈ`‘|Cï%áSqË(XYõ8À5?·øŒ3fa¦¹ \’gª²P?xÐLB[ªÉÊå¨5D ²]¡$;‹<7~bu¸k2¡f.?¦:]†‘C%Ž÷^<ú˜SdÈRR¬h8âv´w¶íS¹ ΙzdI¶ ÛºÂÄ- mÍÒc!”îˆÀ]&«ç)¢73”Ñ>½C§r‚—wD&[Y?g ÞLsÕžÔg¤ ä³’ƒ¦ìÇR;üäVÂf—Ÿ(¦”£3̈ñåÓj“ #s¬ú’%¢h:SNgÒ¼jz“®¸hµW•FÂh_½CÜgÀûï>ëD{²°2cõ$j·oç_E¬|eöÐr@Pú¸ê2¨¨M¤ Å"}ÈæmOÑËæ—í(öµŸZ`?8%çô™bÏE܄Ӿ½¶³®ä>ð«T äÞ&ê‘Q<åk‘^ÙŸF–´ìaöa¢DÄæd4Z Ó}¾2;1îr.%Ö¶QòîÿÀhÉ ŽÖfRëÄx5B ^£AúÚTöþ¬fÊ•æ±MS‹ÑDñf»ZeŨqoñîá„ú'g&´v“UûÉ"(¸ôS¨ÛáøþÓ4^ë Ôš\÷Ü×<¤…Zœ1uÓõ,üq“h4,á|Èi›”gé‹saÉJì0—«¢ a-\F%qœ¶i„!é[+›Í—]-¹òµòõß](¿5Ím˜ `5è0ùþ„ ‹ÀR‰n+k;çäÙw­àã5;ÄvaqÉÒ%XÞN›VΟ1 y¿Œ¤kNÅ1Þÿ3ßXöär2¢jW-ñÝ×°u[¦·’’-›óhD‰Am/X‰Žg¶6FÒ©~ ÈÑ2¹lçT/DX¼,¹^ŽÀIN»ÐŸ ²S¯ãöäMé9S/Ô6ø ë—Y¦'TNŒ¼nÛ±»:œ«;Ïo¤‹ä 3Ä•\ºKò- Í•ÏZ׳ûj•6ž6÷‚%Ž)d^ù“b£+`}¿3Ü–q‘ #ÝMˆ0-º5îÀ§Vº¾œv=¤!ˆ[½û*B"?In&Ù®ÿ1`ZzªÛë©w%·Ó Çyò‡(çöЙŒ²ùAdÝtÈ÷ÂÛg,²ÞlÞ¥ùQØž]"äŠnìwjÆ_?ÎÕ47yŽ4Ïa)íc`lå¢ä³ƒ:/} Ñž„š50ɽ£5¬ÓìœÌßÑÙL}žè–>Z6¾{í£¤@?Í ö¼%ªºHÒ£4*D¾¼„¿¸€"YSMúÁÅ«‚£*B»º8® Æÿ*ò“‹Ú¨1+9íB|Ý+Q^$p7ƒ`BýCg¹ˆÊ:zËþ³×qkƒÕû­W4á°SL*$C柔«¦ÚÐê$-ü18 ½wŸ7Zœ~è¸T)Qš£ é^ˆh»ó„Ušî“žlwÅóÅË–\_o'#F4P´Œ æE(Î1}ìqíáL™Ú‰2BŒíÃ?&Dµ¸Kd’tJõ[wtMõK{N¡4¿.ñ7N²VúrG“b1ždÀm›|ikœH(× Ò£;!nщíÖHOm¼Æ ¹Tnóä-e¢67¢ho<’ûq_ÓB¥Ê©¾A©#x·?\„ÞCk“óÁ_S©È"Ï.½RLy(ðÕÙ RÃCè~)æ÷Á¨YM_QÑjbWl¤bèßèãÙÈ«ã³zݶ~odÐIÄâÃXÏsi@S)–o& ‡þªf©0Î÷8µÜîC»MD((”ÈV×ôEÈÎbœ¡Ó¬Ô/껯P†r›'í å‡BáüxÙŸæ¯|[̰â¡'`tÒB}@ðÂT £\]x-Ú}¹J ùÐ{¢ýåÙP…™¥R[Dúói˜ÒsÖèÕ}c6™Õ­ë&òœ´cGËõ1“&ŽŽ) '­vpîT5¿ä'÷±`öFåUkÿ^kúZ§îæk<©ÕBõf-½‘S|¼Ë€4åëKºÊ6$žwhâ«:ÑãºغÜ1‰IpsTôj_Çh}ûzaªD¶‚'Ü#þ¹óã&T¼÷ƒU(¿«Lñ‹|êöËXøŠeäÉÚÍú/‡—D‰ã¥ØtK0K“˜n 9Ÿ#±Y¿0¥ug|¼+f²yf•VaÁ–Î"Ì¿bn!ZnK‘»)[ˆóO—6)h,Ài¹ÊÕ2‰ÐÜÓU/˜ÚJ‡þ¦NW\êüõóîóö¨O­ :-BɹËaŒÂ’èt­¹']9q÷S_ææ÷1âÊ+|mµ°^òCÕcBãÒ» „™Yä]ÃYÔÞNHܦ×;E„´˜ ËA̽ËZUùm5s—Æ¥-}MÉ·RÔÒ6.ºEߌt2º˜ÏRZøu§+õ=†¬ «\PX[ø™ÔsfFLEHKkö[^5Vs 6¬\?46Vö1OÙìI´¾$1É>K‡Ón2±” Æv©Ç·w+ÿˆ:©Yô ¨À‰¹Ü…0Äó” 6¿½\{¶“½'·ëjä2È7Å q#U]ÿÜìTúÖlªº“M ª,:Ú¹ÙzÒæð„O4 ìTJtAì)pjðîÎ)k›¼Ó-J¾‰¾+?Àuh!Ž[‚±"¬gi+õXíâ=F¬S—ε,÷áwp«Ö „I­ÒÏ“+’ä9(ÒÛÄMŠôO¯“ ¾ì¡|lÕó‡‡>½Ú"ï>hõß\¯ómŒCkøHÛ—¢–ÏF½ˆ8¿fe'•ýaAý…##…_B79^ÏãðMv7x‚&«júºG3Ác~p|Úhä ŒVŠâXßõ¹àýR4y—]~gF,ñ?!)á“¢E\↊²¬é>xQÞÏtÐêJMkØk±ùdoN2ùÁÞ_*ÔpþiP´ºÜ]¤‡{O*Æð²Õ Ë·­G¬$²{Y¡ÒsaŽûÌ`$N62'35(kõ5~{v·šéÁ¡õeÏ}tü™MÕ%,`,†¤Åœ ¡uñ ƪ£4•{ŽÈ/’·Â5 4õü`!7j-JéÍM{9I¦0Œ‰Bc‹*<¡2úƒþ;#¯$;Ÿ¼ç¨Ç8/þ4)<8ÙÎwÚ­ÔÈ·kÔ”YÔs?[Û”O*¯ƒƒÒ¯©š5͇"å ¸Kñ/­' åÐhíèÑs‹Ø'[³;K×»ÒTjÎu•ÌŸPáR¨ü@óÚª¢°¦ÿDkîËXLeNbÈ[ˆ-ÐìR^ý±ká\¬„h›&€˜8“zê\{Á;G[ÀÊd«"Îfü_:=æÃhSDlæå«u|)Œý]NS•çTKáãdæ¨ÝKmñtµ^ò‰„c ý.öµZú='»ÉçµÐæÜQT‘He€§ ߟå:Ô=ÞÊÅãŸÆx×+j½ö¤‰Ùjt€Å  Œs—€Òªž% Å¨ÑøìŠ>Eoòu·o:¼=dX4­ÂÌé¤èµX#©? ü‚*,¹ãè˜5RýÉÄéšúŽ}äÆ&uÉI¼2àÁÈÊA uϪ9B(³ÑçÊm>Ùã®WdînáÈš¤#sƒ³Ä( 2œtÞ4Ðm>¨.º~âÓ;>¢\¹»ÀÀ c›“›üêw›‡F¢¦·®¦0Ý[Xñø Ë$Jk~i«ÃÉ„ÁãÝ{5;÷Q-â¾³ŸÒ½ÜŠõ¿¢y¡pà2©=ù¼&¬TQR0¢PS¿@.{I<\»Z3ÕÎe ›˜¹–~œá¿2õŽkV9ÿbKÁýæ^ÓPÓKoöÔ"~ùCFOæs®ZãJ•ßëeÙͽŽvlšh‡þÞýNÇKÜUû÷n1µUëÏ)Æ¿ÑÄÒá(Ÿ‹áÇ%"壙j%QA¡ÈÈ©±om0òø”Õ×ö•mìZ>öÝ;'F3qG©8®*:-|Ý¢ ºGv)Z¨gîÝzñØVo¼-Ò¬ûª]ñ›Ó? ”ĈA)qüÀ*ïl~–ɦM§¤G .Í$¤ÆA§m eÝ-µFNO!ÓfO[Sh…¿'GC§Îs°´k¬‡ïËé“1ýyD+5tºÒô<¨å:¸ƒùö‰þÎÓÕ“ã5káèmú»~™hرfÄÁ¶ø†¼¼ç÷[Î b‰é•þOGµÂ<ª"#?ZÎjmݬ;C2èÊ¥úÊѼŽaYËþtBªxFÁ»g}ÁïL^bvD,+ÀÙcwÇf> UF@šQæ°T)Re& ¬Ñf ’"Ó íön/ä5ô$/Șl´ÊlïškŒâA‡³õ™µ©oÑM–«Ám IØÚ9B¹Æ¡P›,¿k ¿ëœnçF ͸L"´z»×È¥ÖùÙ(påF¨=m %¡x$^L; åyq#Ïï-ÏSÂ%ÕœR`:Uýü"¨¥ÓÇ •:ª~W)­×ØëFZK å.ë7 a‘R²~b÷5^]N#Ejh/~V³]šÏ ]½Q{OÇUöÈü·H3«6Ôé2W¥’×4 A&A)#c+PÛº Mg YýgwŒM{Ð{èת’hIohX}“–É›5ÃÝu‡<‡@ÕFa¬*ì²Ç)˜>ÍÏ^¥‰»LÖ:è)ìiOÍs #ÒV“2E?‘Ö«GöÙäO’bÚ Ý’}ߨ|î'èöÀC¶¸õdz[ñä|È)~ÁicØø$®¯C_àlìÝjâÒYÓ×L†ñ “/%~ß=§#‘>€îÝËÏC‚]1ç)öd¾EÿÀ÷È¿›(gÔØdÇC’x°–Yì¼¹‹¦ÈH8 Jµg(^™{.T¦ÍDùc,¼Uꤥ8ü'R+ÓP3=Jržñ„3ï*üÂý{\°èËF?íªªg£PõØr®oý飬1Ö–¹3Ô-Ç–êÛaë Üú7è¸óf©_.²»” p`nàI''ðR‘Ügó$…Ôºí‰ã^Hÿ0šÇÂôöå<Ú“¡ŸFmé7tzDN-ññèÆi±Ö¯¦Q·™…{UâÙ,‡™C'‰gýŽX^@ äÏÌÒÑw/»Sã¥-ãÖ ¼­uíE2FcˆÔ½¥¶Iv÷(-n¤çFÍÞÍ7'{” ­QÎ…§·š~µ«ç(M±×&´“’F&ø}+ľùZÌéA6»èöƒF={ÌQã?ËÑLêt0öK9÷9Íu‡ˆŠÆd/ߪ¹²ŠÛ˜M¤EŽê;f è§…åê ÃbÉJ¯`ZŒ~‚˜~ƒ-Ñ%…ŒV¤K,yG[#æ#›K®ÓÈ ?NÙø{³:µ°'ž6ùDƒ®Ÿc–È[½s|·›S -Øêã˜Ï¤Ë¹úÒM—?CÕ¯ ûÐWí W Ýý8ëÛô'ç×E  àÊj¤û™:QQÎßû(.zXù¿µ”ÏšúÊNÉ•‘,ìÉ (ïÍè|ê°E ±ÒÓëeñ{Ž?¹'tRÚ?[ì:VùËÅÉ;Ìu®lê”$ƒâßxuz?ÁF´äX)šC㦇ߺ-õFÝCû=‹û¤ÄGnOÉ7&# ªÄ™+{™v׬™‡LjK,]Š•ËND_·ü*âDƒÐc¬1Hþc„ ›&c©z©4TêöXD€4Ç—l0Q¡ÙŽï´‹ÌÝk2Õp~ ®›´¬ÆXDHtxAî®+Ÿ3ØçƒØÕî¡¡_u‹æËÒ͹lBåyYz³øKàâúMFbn›{,¦OFXfuwtõ½« yã]KL¤¿D˜ñžw®øèó̰=Ò…:£²x;Yªƒ”DmRÚž.4Ïéƒ/¢ÌE0e Yîû.õÛ;^èàÅò³]X\tÒ u#æ0Q÷ð™3¤+cç|ÝW‹<}žÄÖ—i…ê`DAB§Ý\ŸÒ[0’ø©™0µ»¯Dþ®]Û÷ý»Ù®QdÓåW£2½Ö\©ë3t=_v >~9EÔ'[Ý`›XÚþô¸™Q!ÆtK·ûS°ÁಧàU¤ãšÚz·_Õp=é@¬eöë‡YÚ(J0·ª[[ÇBÞVô û¸º–kcY*<ËÆÝ§ÉSºðnŠTb÷ÀY)šŠ8éµ¥‘š”ß}ù–ÀpÒ4ã«f´Öù›ê®®0›obXÈÉé ÐN Þ-ÉÕF¤H¤ºÁù$¡:Ì]Û‘Xö(þGT õˆ«ä÷Gø„Å„ôMwxûz¯Y8ê%ÕW†fàöZ÷ϬoW€ðçM΃© NÎ}Pí{“PÞѳ@µo]B#à²8ˆò.=m†AÎBFH»¥šænO„Œ¦h¨ƒ°—EÉB“Åâ;}—NÍ} Ó¯­_–Žý©—·ˆH_¢ö9k½B±ýNÜõA»õI´Éê;}gîÞe2Õ‘ÊТAÖK‚¦nôêàs-ÈÚ€ÇÞ®¥NP¿ßB•*°{‘¤¯^óˆ‚UM[¯pDZl¾a`G¼ 錃é½Q÷BA†2¥ÖUâüòÚ»¼Ñ½óÃΫÝ:†¬©rÿw@îi[YNÄ ¼˜×…µ\îÄŇeUFØ·»£—ôÍj…âkûç,äμÝÿ'O°ì´ýV)LŒ…o纅—¦‡‹O¿ó:Ðó˜“?ËhæϪLEû’ðÈ»qq±ÌojS} *õÑ+öàþ͆ڢw W\±2£ç9#k_kéÄÖ­R3æñ†(Z‹aSΊkŽé CH"vpdøÀÇuÂZÿOPWµx~ýHÈÏe«¸g±ÔHL¬o âò( (q‰Þ‰ûš¨QŽFÅ[mò_öDÕ$ŒªKW±,Ù|‚EÒ♎„6꬞Ǩy½nhÔުì!NùEow„OÂt8INè wðñµ÷¤t«™#ûäæ;ŠÙó(øi^[_KùÕ(‚­¨ïÖŸ%aË@?ÄIÑ •QHA$o)oŒ{ÀBpØ¢„ T+#ª¿¹øE.„O×ýëJÙ Ùq®>ޗ󙌜ëûîe&j±Ž² vÖVÏ÷Ϥæ5¨æ…nѶ´<Ö±¼!»œ—­ÓÞ>¹Ýà»ú ‰l~8Ï8eÜÔ5 Z0¤9˜|y«·Ú×nÉJ?è´J-cõâ†'$,uãôÝò`Øêˆ!¨J²ÄЍ 3McK¶˜ xä᥎-Æ$²ÂS÷®3Ë6¸móAMÄ ×{wùÞ¼pH  yU>Ì ð!Ä—¿“CâtŸÎ·AµQecÂ<µ$äq6ȯh7°ŒUþ]KÅ:罞;s7(Ëì8 ¶ú…? 0$[Mè{ê¢Bu¿ìÛh ŸÖLQ°ìÁì•ËÝ ñ¿ õÈn3–vŸöêß[-Á‚´C 9ÍbƒRÂ饫ô%C3ŒùîÆµ¸ô ¡7Z“ÜÀêçBõò­kÉ[ß ±rÅ 0@6•àñ“®(¥O“:Ƶ‹|œªE¦‰bO=ˆæ#0ÅvOýEäÐãxP¬c§CŠüò,à2› ¡ù2Q—ã ÕìnõH‡L$Y[YåQÈòeÅ•­*³RŽ…ª¸±µªí˜Aµ<‹¸'€}Y™ý?£W´j•?ü÷ÒÔ2–ûáVúéåùŽŠÑComq¸œPð|Z}¶ÈQp’¸@ÅÁ«"—æwK8Chv‹ä¹¿¡½…± YWI@Ë„$Õª¦Ç¯ƒ€§‚•¢w­¹O‡jXGAeÝ/òw`÷BqPaL—ݦ D‰ù‚ BÓàÞõ [SZ׌$»¤ ‚—Ã>±ÕÎrÖsˆ ¦tœ*§ÿG8ïŠá¨o2`6”šÄS¶P™ëÍ©òÕÞBDßô|:cïŠÊ¾’=*,@0¥b¸}Ò­rVÐ8>†ÒyÄ%Iß%r"£y¨¼m‡IÔdÿ‘¨mÆM]L¥€QÚN¡lEX«ñ%hÏ9)4M® Ã5Z,rYÁÄ9kºQ'º 1Çêéˆ#·×%Æd­}qÆøÏ˺á"¦Sp8ZQq/÷m‚p¦RS±€¢ >(%{Šyªæ¼ 8DH Šðð\íÑδS¶Ü}ÌúÛÔ»jAyçL˜¨•ge˜kÕ[;oÓÉï~çSµ°'q×tJ›ígŽ5æàïðd¹ú¨¤ÅS¦Zà……ì‚ îªˆ%øäoe}«R)u¨½R½ 2~8­¸³¡Û·¶].7d£ yåŒÔfÇašÑš8Ô„ŸbZhä1ëB_ Mp©â˜ÄS-·5×xú'‚h-#Š%]ÏÑ`ÿ9«; X¹ÂõË£?àv¹³»yL5&kS QNEË!‹^´ X:^-„Ž ˆS7”ج=0D0Äœ% `eÈ©nõî ¹r²¨³4…ZÀyaõ b9ÀÆé|IËZ°ý(Ç…»q0a'ö1æ§0ùµrl¶¾Ô¸ÏMfMÇå©Â€l²/ÕDÉ•ÌÛšóVúný¼kEõ³Ä:ʦtܼ_C«!4Äô;–Õ{°ì—6‚ƒd–mêÖxì?t^º0cIŸ$ô‚´ƒï J×Á†PF“ø©7uNV8hîNøä©S¼ƒ)ÙD÷“ÑQá#SônQµ.જº‹a@Ôpô!â@Æxÿ›wE\ ðâä²ü H…¸†Ð{¯Ö„O_àƒ=Eo‘`ú[6;°®{,¥_œ» Q‰‰ ÷ѸŒÐæÄ}ü¦ŒÙÍ»l„‘Š9#ŠÕòzçP枬rš"O;”ÝÅ3š)SÁ3ïÄwdreeQNÊŽavÕË6ÁH§±Þ#×;-g¹¯gÏÌœ *êÿƒZÚ¬)òÍ-C¾F¦ÄŒ6Q§¬ÎÞh^ý”lOŠr­ñ”±xTVí x »¨°’ú…ã#pîHüápöV-§©°MÍ}RœÔùÅ"ÜkÂR1¢¿þ¸Té…ŽjáûhË:LT|׫A}^à9­4Q¨y±È ÃàIj/-¥`ºÓÒ©!Tβ_rè³b‰–ÈQîöžXÒnfüÀO>ï•çœg5uƒò¨É–òÕ°ª†rç1*à:N ]Û…§³9C ½¼ù¾_´œÅ4îѾ/Ë*ÕT3øöe³“´íÖ|‚B€„GÕÕÞ'Aþ5oÐ7††€Í–“´¨;ò¬P’¶^2‹ÈE'¬Ï—iñ¶V¢\„?âªçÛðLÍú^á â,}®‰¤´¬~Џ‚3pÓö¸‚#oKzéãW(9À·ò[V\KÄìý¯®"ÌÅxž¸Þå¥ù¾•ûµ…ìFXe¾èJj¥Ü³Èù:_ÛUþÿŠÀ}ÇB†5ôü+]sÌ™¦Ç)4c†»¿×µ|Xó¤*‘ÿ˜GxɺVû_$6¡ÊBPÐûAšEE ½`ÒÙE,×åMAŽ>üòþš0ØèJ´cAipݤ)¾³'é‘HÝŸ“¯h??©m¦˜ÖOš£Œ¦ÿ_’ñ”™BÕ¦âvÎù?;Ý—£3¹—àG¨B8”ê7ïÃ_"\Ä‚ošÌ'©ÅGt&Å›tCt!„— ë´åPÐtóNAE¦=gƒyfqõ9È¿‰ý„ïHŸë&º×Gõ™Jgæ@ì_Y#Töêîl)ˆZ©—"Uú(8`ÝÅ ýôH}.ÐA¦V&z¡ÕÑì:gÄø„‚!\‹¤ß¡çó'ïÃ…A׎t_D;Š&FÎŽ—´Ý "Cy‘nb4Ns˜2m øQK¼iè(±[,À{Çï÷~F‚=PóÊqIZ¸ë‘y9ÜÜÆ¾|þZ¼6Öe‡ð5c&}ÏWþôÝl°J'õÝë+ ]ä{}4̊ʵîÍ”ª±¬œ*œÅ ¡{r Ùo\5L«(IÀY"âŽ÷~Q}£ü’ªš¦ê…rnf–mÖÑ•vÜûËðì¿s\‡©ÌóUF©5;¼ƒÌ8yÕ~öAy"¨»¡J ;H_×/hÐc ŠÝöÌËuVGÔ}rÇà;u³0 àC,r#Újö‘–;`•Ï5ËÏ©QGeBü'âH63¶ ƒƒ™l/3va·õs®aýy08œæ`¨éÓÛÀ‹Я’‹I9‰œb½4e:˜e¯!†¢Â(ƒ‚ùzÕŒ¾ €!X°J,ç­hJî¥\š&7EhL =\RúWsЬ´S=¡¼g)Tÿã¦W .žYÚí5A…¯cY@Ë•ƒgƒÜ±¸¾TjØŠÏV=}Fœü¾ˆ¥æúKÍ[UñŒlöCè¾»2îP ÒG€gèAÊÏÐ¥|£ü¬à§†Q ˜¤½Ôart¯_bªN2¡G6—Iot:ÿŒ2¸"LHåÃmÍ}¥aŒ~¢êׄCźî©\Ý7¹iVxwoŠ1ÑïÉœ°Z—ŠÕhØ£²ÙÁÙÏq]ÁÔìKLkuW±ïŒ¤2ö¨Uy\ËI12 ®—zo ¿²ñÕv NJ‡YHüRÉðmƒÿI€áÏ^‡Ô‚u~ÉrŠy…v^˜ŠÞÕôøœÕä¼Ð?Ê7„«¯óÒ¶”>㪕ô† ó̪†æ­Éœ+9Pcõˆq ÑeŽÍá‰LÝ%I]WE&Á!ô Eþ7ñ ¸qNG];éܸ¸5[=7£\Wˆû‚ƒÎì@ðonÛ¬kWOŸ8†A¦˜Ï—tЧ“Lq†8 yBHÙ²c›mIæ]êõ|Žê®ý$Mê¨Ä–m† è|O2!óm‡ Ι]ú6$–9:ÛÒý!z4î/NkûöJ!ò`êÁ¡aî¥ZšÂÂÆHm3fŽJ”š§ ±+jì¢Q/N•y#é>g}N‡ Öã–õÎe–¬üÁºxÔ ‰}ÃïÃÕ[ÖïògÚÈäåU°ÊO4¦©Vh~ìû<²jòÌßx`åËP]´=ÊlåFsï‘ù_¿k¼0žµx3 YRhMKMì…U…‡’Æ€d=¹¹‹l›^VÚí·}CgV/k7>'¾––á .À¶R¿7/Íë÷âÞܪ%ó@:%•pFÛ5Æ•&àû¢¥3ôY|÷¤KâˆÍž—eÒºŠf,~€~Ëà­5ƒ—*­‹ØÃ“`FZ¦þáh¡½aËý†#ð–±*ÿ¹÷ãN‰h<¨²)KÙåŽäÌüS5«ó/Ø\SðICOàHU1Ë»q+ÔC>µñ©t­­ÇO–}ˆ¶š¡†x^\4ëpká—(5‚)»;¼Ìa@¬ÐGiV?þ²«ÅTŠì#á@eˆV J­—ÝAˆqMl;$àF8Á›H<Ï¢)?j†µ”%™/&[O¸ï˼G®¯BÅä¬- X¦™*:f@nCðkLl ‹S‡ép õ¯.ÅõÙ&¦˜Aá¢HJHJ±¥udxÞ üÉ‚?• ‹®¿fŒ«¼ÒuKÑ٣߮ endstream endobj 1236 0 obj << /Length1 2202 /Length2 13864 /Length3 0 /Length 15164 /Filter /FlateDecode >> stream xÚ¶P\Û¨»k€ƒ»»wwwÜÝ‚»'¸w înÜ=xGîɹ÷ÿ«Þ«©bæëîÕ¶º÷†‚DI•AØÌÞ(aoçÂÀÂÈÌ •WSã03³123³"PP¨\l€‹(4€NÎ {;Þˆ:]ÞdbÆ.ovòövW €…“—…‹—™ÀÊÌÌóC{'^€˜±È ϱ·:#PˆÚ;x:,,]ÞÂüç'€Ú”ÀÂÃÃEÿçq€°-Ð djl7v±Ú¾E45¶¨Ú›‚€.žÿ傚ßÒÅÅ—‰ÉÝÝÑØÖ™ÑÞÉâ =Àäb P:Ü€f€? (ÛÿªŒ f rþK®joîânì¼ l@¦@;ç·®vf@'À[p€ª´@Ñh÷—±Ü_ô€¿{`adùÇÝß§ÿp²û󰱩©½­ƒ±'ÈÎ`²%ä]<\èÆvfÛ8Û¿7v3Ù›¼ü™¹1@BX`üVàßå9›:\œA6”Èô‡›·.‹Û™‰ÚÛÚí\œþÈO ä4}k»'Ó_7kmgïnçý7˜ƒìÌÌÿ(ÂÌÕIÝäè ”ûÛäM„ð[ftp033s³±€Ž ‡©%ÓîÕ<€*ÿ¿Uàëí`ï0+è 2¾}!x;».N®@_ï+þ›XXf S€ Ðd‡ðÛû›hþ¿]¾È Ëü6{,æ?>ÿüÒ/3{;ÏßæÞ/“†Ž”¼„Ý_ÿ£±÷x3pXÙØì¬Nn€ï;Q2ýóï“Òvæöž¿r}kÒòuûûú©ÿ^ ÀûR°›Y €ú÷ˆë1s0›¾ýaùô?üÿÍ÷^þo#þ¿ I¸ÚØü©¦þSÿÿQÛ‚l<ÿ6xYW—·ñ—·[»ÿ5Õþµ²ò@3«íÿj¥]ŒßÖ@ØÎÂæŸ6‚œ%@@3%‹©åŸƒñ—Xý³Ù•ìA¤ã¾V˜ÀawR`ŽbW3†Á{Å©Óõ6…¦&;hÓéN8e¤mý‡8õ­Ð*ñ‹÷qk#lx[’rû“ϳa‚ÊÌn;Âò4Îש¢cá†ABø÷ jB{>/Ž>Ö­àÝ2yŽ®Ü(J˜÷î’ ƒåkãa‹»Ê{5œ²ˆÏå³ 1êÑzŸç)òMrޑ¸0ÂÑb\x ÎßÞÍaäNý"–I Cð=‰a+öÖÙb}XðÚ¨TcuîÁ#ÇÓyGy‹1>Cé-r*ƒ»ä]Z½)°ô‰™†lÙ®·àBÄÌàŽ©˜„•Ar‰ÎïªÄdŒ« pOiüjæ q›¾MaÏÑ|Á¦Ðò41 ¥TgÊs¦NŸ¬}\ÄŒ -Wß}·_7J§(ÜkÆßª”cáxzDÒûd¹éQÄ'B÷üE«•r=—Æß¾>ᩪËXúÒ¼¸Døœq ³7ÔÞp0Ta–“¡¿rR&äœé@Ò¿¶”Æ×ýÐM÷¼u0-•Ïò§QÐÚêM(`§Ã³'/€ Vo 7M§­z6„”DH¸Å…5c¬lW/œã™º¿[-&K×ßã&ANSõe2NûÜ^„SqH:|G<ËÎ-®Áü!C/¿iöÓúî]§.ÏAI1i‘µáǹ0r0•™9Ü…ô‹Ák8¤×XÒ9 yË“y9r6%ˆôµS¬ÙÏvŽìJ,ún{Òi.ªˆý6Z˜Sñ¢~¨:ð_s‡ŸMÛ/Ë'L¸cœÈ$zvà¾}fªËytº»9íݸïÓHâ¹½†Ü•Ö#÷K˜O(h< ˜Šn.ˆMÇYúÎî&Ù9J­ï­SîiT¥…2”›ôÜѵ í$!á“0Ãò|äAv“`lóè£Ô\ÀÚŸ5”Õ=ìªz´º©B^¿D®ßTËf°´jIŸ‡êI„ã]¬?71œ+ð xð›¶ ²~ÅìŸiP¨“ª?YÚHÍÆf}ɶwänËúª'ÖA$:[z<%’×/αReë0(Ò•ÃàØ…´¸ÀíŒÌ4c•Ž{جé[ ú"7Á‰vÝ"# 𕬰s _kñÅ@{ìO£IƒyObQev8ÏöˆØoÃ(»HMC”Þx®qÊÓxÅn6õJùç-eµã½=£ÀýIOw}·¢6ô(˜BÊÇnt{óæUr‡Ccßà·OX[åy'ŽUü˜äšÞD:,†˜k9<¯óá>axUFÈ'×ñNlG\Ž Õ®Z'ld{è4Ä´·i S6Ó…ÉI”—¹ë¸çmË·¯°ï e_,Wý>œqî +[æª>S§y¥¤~4÷"!{) uÛÐqíØÓÙ#ÕèWÉ}t¯ºa¸&ÔîópÓ´ì<KÓ¥#ª¡w×)¥þ*éâÓêp; ³zèά"K£º_z¸.qï ¬Á ¾ëžc­â!à[DÆÖò|D‹d«BZîýŠ+VÖ‹Ÿø oJTײœ±æY##*Pæ}”|Š‹>«ëpËÈH-û¤±7ÈVj›ñ«š·7è"G@Ó¡$‚î‡Íb\¯ÝR81›E^)×WÞQåÀw½B_”üfN\…æêÄÎ5ôœUËù^=ø‚eª+§«©âÒÀ¯Ú<Ç_ã DGn1®¤‘›Èã¥$µó\æŒð‘CàPõÖpå²­(^Ì+³'!=†OTa²`W£N6Ö»J±˜_ù>ÙðÕîôäÉÏH°ˆ~!E€·ýú­!®ý¦\:Å€w[ѧەÑàûŒú¾ë5~¶»‰ÑÉ OLJú¢ûopf22¡Hµ̧7×Zñ%#„w¹Pº“.×[˜DÐ#®ÄË%WF„T·ÌjþùHPÒÞðÄ¡œVùxãîQËð#ÅÝ«‘pícƒ\ax÷Ãé/]0Sk'˜ƒ«¼Þ%Xe¨·¹má‚6R4WiûÜqŠÕæE¶ZvôQ Déc›iÈJ™ Ðëòˆ¾%Jʩȓ‡7~:áP¥ù{ñ®ˆoÕ]b.[û^‹Dç¥ìR~ìgÑ2\¥"A[™üYÓ}X¢u#J{ÓàÙ½¾®^}>9?-úÑÁp2Ñyñó\wÀ¯óñn¶tûÅôøüZ·ëFîøsÌqD‘#Ò–úsµ úž?È>¬kÛÍÏ¿°·)߉"t9úG¯“-HʘÁKäÜi²ñ…ëN/™Ä|šÛþ ;Fs÷b!>|aªb–fÖ¶ýKo(–Uhïƒéº£[ùën^YšÁ›Ü¹&u Jå<æ© -il‚ñÐíøªUŸ?'óNzÊ_µ Uƒ!A4ÊRmÈC!å½ ùqPQæÔÁY ·Ê™ü'ü%XfV¶½¬Ào61µ…ÖÕr¼U¨ˆrÄÔ«ó¤rýóH¿ˆ‚¢~~Ru²zBK¹D|ñ†äµýå ¾²‰k¯¤½m• ÅacpX”UN·'f½H~QjÞX 6`וOÕ;m œDÿ ~[‘°ïiÂTÔ?ôcºØÚr!q`ÅÓäe1̘1ÜwÅÔö]—x'³(ª ¨xm%Y˜ë JÕ7žúÝÒ¾O_‹{':¥‡:!@¨ÁÍöK#x  lkbs:8<—œh0°æåÇ`m áœðTÜO²cË…Úø‡ñ—à‹U _ú^Uø"Zÿ^Æë"$ø¤t·t—Ýi®°Ÿ×„¸ºxŠÍ…}Äu*P÷ÚMá˜a#0'·©ªÙªóå Ÿlè> LÄv€ÕµØ rÖìªWk·—QU•>8P@Áž Ô>ëðZ³ß™tC³ÍÖ»¹Bè½ÇÅ¥Y“d†UïÛå<Þ²Ž RL ÃÅt›ñçðb³ÝZμbúz[ZÓP™‹×hˆyí×}8-i~†+yRžÄžD_\õñH „ãéž"µUG cRŽ}]óFø­˜½¢qi“X œøg÷-µÊвñ–±P©*¼0—r RÓ8gA ²_ÇÏ¥&Álüåê¼Æ©!è§íÞ>ØMëˆÂÐ÷NŒ4M)6wù)Æõ¸D‚ÊUš3l¬¡°™Ô6¥?Ž‘ £öf|—L$R÷gôSßW«ä(‰a'óÏ×ý{R܃nÉÒë«î“ƒ&€bÚÍ.èA¹í•=Cº­ª-2ZÜ‘¶P6•FøŽ m÷ä¨TÓÞÖ\aHn±,I Ki;ÐæÒâÕwø\e^n¸dÄþÙ‹½ˆ!† ŽÅúÜ Õ9%Þ½TÏY'7‘²ùÐS/#S¥ ‚ `söäbÊl\hž(`-+ôz}¯ïK#9TiÍÅÙÇ‚>cªfïù xP¦Ÿ¬ÕÌ®†ÈÙåY’—z£?“ ’jþŽ£@Ë«%%—ëu”äF霰á|/Û€üóÃ÷m¿>ƒÐ,—=æðzIJþ¡á§ù¥ßÙw÷–ß¾ôÜyd)2]™­=ŽKù€Öt“`ÏÑI³é­,’\©¥KöMt@šÍ*øxÁ¤™Û¦®…NWtŒ¶h~@¦¤«÷´ܶ#¬ÕfŒï*‚JMF’²«"¶n¥ÇoFœDL‰1ôd3@ïƒ6¸÷õÁ1vÁE鄎Áá‡üÎÇâ–(”ÿÍ]|¶²bx )« —)Sü„‹N…ÀèË<WŸá8áÔuóó XToDO¶ÈM÷–ï)"QDZnɉûJèÕòåaX£¦D7ž5ò¹)÷Cª\Û®…)†q!(ÞÙÈ)«ä'¼d:W .–Ñðr›lDOäþ&å§OùµrS¦Ý”xÓRv‰4ëpðS¥£Ã>–Àwýï6{|/Q²¤ïÛä§nà †R4.hQét*7é;•{šç—ÚºÍgé»À¿òA­¢Ú7.ãé'GiJUbÔžniCnøâR))µ©ºŠ˜ãÓçœ/¤ÌÉÝÍï\7 <º£Ú60ÛhÀ¡Íï§Úf F¨)Ú¹àr.É“jÿxèØ±+kÎ¥(%î³,>\7i"s¿š̃ˆ q5«bHÍz¶9á”a¥;Îæ„¡ Š3nów©æ€²zÓ02h0è¾|B§˜„Ò6âƒK‹ªæ —µ—SmOSX J¼³T²Ü»XmRIÈxÇÐRÝŠ¯zu¸÷1d¿]>ðªdw¡H•û Š8Ф<~t 1¤ÂmJ÷}½.dÀh„TÖx/±c‘¸,Ï̽ öP“BÛ&²Ë——©1èCµN)p^¢×[,Ï{öÔwTËóÞ3ÝOµ9´iËÈE§„‰ç@Y”RÖÆÕft^¦9Ós ôÜ)B|QBËÂb²k“ÒmtXÊPº¢„¦ahCNåÝ6mlA3´rŸÅˆV ˜k¦ýt"i9…a|a¼ÜdH)»ÛzkqßJ™[@»ÎÐ- 4ÂîÂøÙÓ¦¶Ð½\T$–·ÿ¸Ûf[] ìÇIZmœ¤1:Gþ=ܓ͢¨Æ(ÂD[ÏM|ëˆpÙ£/˜±È5~Þ /.Þ³v«‚Taá¬õføô_v:³&ѧ"Î\6F~&ß1tH¬‡V•`DÁDHØà!ÊÁ{FBšÝ“”?0,Ú 5îEO&"h]†èÅçXhÛ™ëLé‹&i¯Œ,4ûŒÌŠòñÇd è±Ô‰tŠÏÑ\óŠ46Í®ú39º…}Èy±æu¾Û‘-ãóDÈZ“©Ð'oÞn3ÒáÇæwnS÷úJ¾¢°´”°Ö£|7ùÖœëa³(#Ám ÈZ¬3rÑúù‰÷סã¶5ÍUà%ò–?wr•(Ï©§½s ö®‚,ž ¦  q‡_àŠæÇ|NëÚ¨O̬‡wñ»O˜ò'×Ûb¤æ“!§d¨Ü+EÎ ]ª; >¤ú²PÜ0R¬Ë+Þ4¿iMBªÖË–¥½fJŸ@jD«nËè°ˆ¯çѹãgvÛIh¾!Ò”HóßQNÐ7æAãŸêÑàg¨’šø| (t$(ì!0˜_¢´ÁÌó9Œs>²ýšQh"îÁ@?¼ušƒÚØê‚âÍò‚;ÉQϵ\‡†kõegöKÛ|©FÝϽ¸íęԩV° U÷k|\F~NXŒKá³ è1…â3ø\þ³ƒ lT<ìx+Ô‘\Õaž@­ö€ÄÄè(+,>H´Ç™‡zYU2vÔo4¡,†+MHµhW «Xú"9ûƒ|Nl"ñ†XW¹}ŸÛ™_AŒ3Ý‚·F!¥Ô7Ž;n¢Ó5É·ÐnG»EëØô•$?‰øÊ…ç¡}Õµ“‚T©¿Í!š[dçL-f´úmìn…mf[ö•pÆå!½½Ö2;খnI¸0hmâpj¶ƒ}s«5É.ëK…þ÷þæ•ÎüõNíW¯ö>©: ïi•÷<©¤3¼õkÄ(–iƌֈ[Ô££Ê·U­Ö(ïÚR_k{ìp÷°“û*þkÁÈ–>3{0â{ÖNà éñSæþÒ±ö’Ú©â9Max ÔìToÑThFM÷ƒ¯“®Ðù²v"N =gbí}*/h@ŒÚ„PjŠËƒâÅGv50UÎÀ†s©¼î÷|Ñ”–õŸ'WqVÐΡ­L½í^¥öÔ—Ðíx¶ç²tÐvKaÜ•ød+Š:Ëg¤§S4o耗A.?”{sŒÝ£Pë˜ ÓðM’ët¾¦ óñ’AÒ÷F×赟—ZõW)½7S‡[ˆô«oÏ+u±:+¥«…ÉÃGËŒ&wÊ· £Õû:èõnUµŽ/±ÍûlÿÎ ‚øö™4<|-é5KÀ¯¬‘£1ÿ‹º8Å=êq¦-±Ýª°±'ß.#×OÍõ‘vk_ [µ¼9Sˆ¦ÔÐ¥áyÀؽý0yGN`¸!»Çm6çifzE®«¶uÅy©8t‹AáâðdzÊÂd,òês?!ú!A‘¶}ž4»+æØ3õ±§›õNǺŸ_Aljڈ'zÃ\!Ì”Þ0._ça?ëµ€­_¾V’6‹ËõEa`ºÐ¤ÐN{]ÇD<–Ø¡l|óa{_"Nc´ ÍœkK €¢®Bf–Ò£rä_—à+„ž-ƒ…VÖº‡îêÎÇÓ5¶ÊG÷«Ø+ûãiUœ^EL]ÏàÜxgÝ<:Äú½=Zˆ¬á?0¼hTýʯÿõýk'„FÝžÜÒ-äâšà&?•ËŠà`oH@ÝæP´kòÿ0’¥µU“"åEÓUÞ â-#aî«ýJ¾ä© •~IÛ(’ÉJKøOÙˆ\GçK*‚òàDQ¼Ù¬š<ÌV¹žÝdZO.±³¢Ö—ÞkÙµÈÚ»·šŽQëZߨò Ì?¸+&Ånº|¸! V}ûG‡ÊªÜ†ˆIÿtÍ„\aFÑr=k †ËãsUBït*“ÜcÉþGÂÒ`ܘùîMR«¯'PcØ·<ß$óx•º1_öN¸‹ùòèÅ\wÝ®Y±~”®LLÑ\2jrV:n\7ø´æHÊÆ"å—ÊÁ׌ý*6lOj>šfÝ9…uøF¢ )evn«ÎEøXp„úó×,ÞKà×¶Ò…ÊþºS¾ ²j -:‚(‚UŽÔ!8÷¾ø°œ´Î_8R#\S>œ‚‹Ã ó§²™~g EzÕ‹9<"¸kèÉR;ÔB=ì*~ü Ô.ãŒ!Ϧ‹'µpß`+ÎæØRçY‰õ¢ŒCâ{_€‘ãÔŠ¤/m;–Zdz0Dì«|âqñrþI2=Üïi¤»ðõ•×7'ÉúgJÌêÍú‚tøûTd¢²ïé‘…+bêæ–µfmP7"èDˆchBkdqêc‰(Âd…ÁƕቂHªŠta©ì–ÑpûËË7×_© k*§§õ85W-ýgX›¸ #ºŸMY|óº?Å5w+4ëawººVŒÉÿâ×-¾l­•‹¢þ†9òC‹öæ6¼s˜‡L¶™Ì®‰©±¤ ;Å%“P4w…ëÊYÃt’}ñ‹}ÙŒ¿ûÏ÷!£ZüÛ™6ØIWÅð<#dPûK³Â¼Øí3¹=ŸrÀ¸õØ| \BEŒï´[Ãr`ìêBÀñ©š­ºx.Ø9¥Ng{Ô¡‹âˆ7AK(h¹ñe ‡,@"¯¹·ª;³¨Ú¾ØðâºSk4—‹TÏ`³åÅ=§'Í£…9~G˜i°4s5jÙ™E³©#‡øjMW"5ð¥î=Á}3 (DqwÌѳjgù=¡#À¨Úžª4 ]˽ÙpIÇ“c¥ÐL«òÉsY\÷´ÍŠˆÈ09S4O=m­øó—z!‘éÙƒÐÃÁÔɦ0\ÍB÷¤éVlehìóð}?;Ê- ÷3¥¸ÈUìJG’Ø5èÃ¥‰Ð`#{£]»ží'W¤7dxòˆíLø¾.'Šö)$X3˜ÆÀã¼'|¶é%Ñ4ò/ºÕÖ>Òç3ZÖñ¤R‹qÌ3’ž«ëÜORû³u˜¶nÃŒ]o>S‹s÷vžÛ0ÚMwRÆ Æ‚=ÃÜ«ÑÛŸÔ\´IÔÎ1 6¯‹Fë¶ù1gžé;OŸ°|ʵxïr.Màlšy@„ý½½®køøÈEþÍO¤tf¡˜ªto‘ÁI(«ÈžIäú´@pííÕÔƒ‹HaõŠNÂÙešûF…Iø¨ªfm ðQG5UQŒ£4AH2„,îŸñ_LFÎ †Æù î ÓNßO– ¸p5ëRð±Âx~aºhû𱩠èW•‚QJâ%Ò®cžÜ€rrÞNp r/«+ÛÄE¦xŸgA¸]M6¿(cdt@ËûROŒªÈÊtT!îÕÛ´â¤H‘†ñô…Écüºkòe¼ŠlvÁ2!ès\¢qÒ1§;¿Ï ŶM¦sÇf¥û^¢«œxÏ ?â%BÞסë|û$ßgnœ©nFËŸ¾×¬ã„»ìmsTe?ù–—v»¯ˆ?-eúԹ㠴TŠ6¸‡¶‰ëÒ…±Ã™S®SÃIsܿӣðnP˜.ÚG5¡—Ž>pokGI„PÒ=ãÒu×%ÏÇbÿÐô«§Q€Ã¿ÿáNxŠAz}Ü´ÓB¦8S…ãÔ ¯Ž+ Œ%›÷°gÏ6ƒ/2ä!ù)¢Pœ„:±2uMÃI„žœ\$šc¶ã1ó^/`8;ã'‚ ,æø­^˜¬[9ÒäšYœœìXPٹݭF𠥓õ¡Ÿé&*%ƒñ Øjrñe.Ô{à:NfA|þþT²J7œ])Ç x5q£ÛÔÍe8úÚ 1—F žôuX/A¢É`qmáüS²KÆa§"©0Ù™È"­<×5´ÚQ^gµÃÚÇOõ íDÆýí+$øòÜʇ?'+¢Ý-w&D”„Âz|˶ÜQcDØ""ö HŸÁò׬è!¸ç$ bÓM=øÓòS.á'œIÂÆÚ Äý’ÙÑõç/ը׏ƒp8 J[ Ū,IÈ.?h®IHÞ·Í ­šeöVŠj:6 X¢†‘’òEåsu’‡³)éþäV ˆUÐvc”z{ øà›éà»Ì'Þ‹uÕÛ&Wm6ßxÐÝ/HíåAWߦVp ëË,ìõ³m Ü(nÆ?>Ç^c"§ŽÛWìªqN…X8à¦Ä5±íã(®áÕéö~é ŠÆS0fv¶*äyYjo‹ˆúüÕï‘5DØŒêéAï|Uq¢ôdŒô:ôsööñ‹3”ND9l5ÓSiª•6 ƒiE©A^êÅsF>8˼ØhÿöDWs_[}®£¹ŒW#kÿ•Pûl³8×hóÙ}vÖÊ‹ ü9¿4¥ÍÇkÆ1¹(öšÊe5§[•е}.6Ån·¡ ô½HÜU`+;NÙáÖÖóŠÿGJ&†µœ`¯,†[D™Rš…´SÜšºŒ°q’Ò[HÞ‘Ÿ"e{Ã4)u"5,M1¼æà&Z´ ÷¿N£T‚Iv¿ÐŸcø “žH»Ya¯¬çëè?~¨®Ó¯¾0|²×'W%;§B±¸¡/N°iÇœ¯XÕ|AméBœšÁþº:ÿ.â!å@¡Ù(¹Ù|Uøb© )(“!×P’û '¢"¸PP™ÈCB˦Þ]ÅÔ'I-Ÿ—û8{@Ûûô„’PO]ñZ~ÿ &Q˜¿´NÊÛ†ž¹ìp3½õU·Õmî•kËãQ'm_|,€ÊÁjºÈarØfÂÖÆr¯÷<ÛÞK²×ÎÜÑ-(•KÓ8™ˆ±DhÝT ™“ó“Qˆ4^ឆULpeÆÕó°á3Mw @H_Í0+ÃE1{„¡8/óå­¶`¸g."‡«–»‘Eu«µã§ð ©iZ§âB4<ÊXè}PÂ\1ÎݺnˆÀwÄWbôgjh*qDQí¨ÂomuíiS+ðªóþæõa 9ÜÛÏr2ZHw÷ÅåJÇðÏT¶¶7šM ,Þ+ÂhÝ­¡ø-ÝR ¼TvÜÙ8ùJ1ƒä¿›|)ˆ‘ âöRDÀÏop2¤ÃÃ/.8DCÀËþhHu°æÄ¾-·ÆYoÀ·OžÊz~W ;åc€f™iš7ÌÕš¹šú²ÜõYÌxÑS°ïú= Åh¨ä(##« b™¿t`É“0.ý«ÐÂÓädO#; &”?ã¾'ß,š>üRßž ©ýí[¥Ã¦fö´ÐÏ×o%.N¦‹æalM¡*¯#æH]ÎU<‹áËÙΩDüÐÔï˜"d}—îèµ—²°Jgwâí×Tz8.x+ ”IJJ?‡]&­"Ï.ÃZènç@KWdïu÷QÑ#ú mW›ÍÙY¤÷™a)Vµf>‹´¢|ö¬næ‹vÔ$1*©)‡ÐÀÐ×Ûf¢jD‘ÛÁd,0·. _pÔõ‰›°ÒÓæ`.!>É`73ÐÌ]z5cËáR8ÝõÜLÖÓAi[—Ö ˜ÐÒžãЭË‘P ™eTô\ƒÛšÌ·ÿ ×k_9¾)¼žD§:Óˆ9òÓ$Næº?ò}Œ*“ÿ.UäÌIžƒtãå¦ßEÓnn“Oìœ~.Èhõ¢$Ô. l?m³=HînÃFæÑl‡Iˉo[N5>«0*ÉNÛþÉÃ^§ÂÀè ¦®_+MIÊo†ÔODÚºT8dA“ô'ÓÜbÜ8(Ú}™´=íïB:YÒm9y]6âÿ+ºlkÜR²ç£…W¬à,c*òõ!Õ| ô†ÖQÄÞG"rÆ@¢¼ÁŽ/öÚ-žX—|Ù2Œüa`Žk¾ãpáPÈv¥¾ýˆÍ¸Ã;:ºy iú†VÇWÎ.cb5h>2µrß$FbÜù¬U‡JŠƒ¦F,çM빴ʤhí†;ìã%bÛÇú+sû¤ÚJ%áÃýÓñæ:œÝÅà›”úF„ÂÞÒGȱê!**³{™jgÃ,¬N°àE”ýŠ´Žf¢ƒ¶mgx|[R¶_Ïã &Šò˜ðI:=ßOQ÷Ö›ì·Íì5†V®S×ÖÎþRÌ5ª­9”ˆëЀèlŒÌ¼;öøH^ˆ‡â]à\@mÏú)ãýé ¸obø@V<%¶ã ­‚äçã-˜Ð9 }l÷’ ˜²t2Oµ ÌωÏ6Ì#f¥Ì$Ý’%öùé•]èp•]ýÐp<91XG®·!ä3Ö vp,RÛ(Ú}zÑó¼ïESx3 ÊÙçu’ªdh¸ Ü{¦Dp;é{-:¿ô²ÈBýŠŒÛÛã˜[°%s¨hC.0—g5À ¾~âàhšá$ëVp«D"St±ÓˆõÍŽ'4ZØv›âf‘sÇš¥òàf å„!°=æÕLôÈo£À –£0òŒ%W‰ÚL>©F¢ÕjT®«=l¬žÕ`·XJ¦µAËìXºzoê?eOÓìDð‹¦H² Á[t _÷v ÜâG+š€.¡+'mÌç (\çsü«Pjtѳ»áíÎf0ý 5 ¦ESíûƒì¦V³Í6·…ïj3L¾Õ§ôQëÝßGÜú3#¿Š‹”‹Ó" 0 "ªq7wLÕL£ž‚ £Ùœ™Úa÷òظð9é§ì œ-sÍÜÙß’ÑhÜpU>ù±ÿ”'W#‘ìŽR‰áZÑURØo¢îê*0"ÖŒv\ƒÍà›Vmå ÆÃ>Ò©£ZÕâ}=»Ñhä'Ì—<´DD©Ln×.‚c¨ÑÌ=*þ!ö\|&ífv²1èNyö£!޵E+ƒ ²š9=xYháP"y%@±>Ê9¾`߉£P*rΡƒ5ûMÏ9sãøV‘'+g&©É ÞMKÕ¡šH™®{m „ijÚÓI:™‚dÍ¿Lnùúã@¿ïE mI ’tÙHbþ‰m©¨¸ª5O.„ëß~¹êK†ÞÔËüµaÇÕîtR {EEv¤; æ‚ÅuÎÍR"£ü«¬µYy Óø+iKç  £ùvñÃP ÅúçàÕ+:Ó¤;Iµ\QçìíÂBx~UôQÍ›¥¬fš>ø#ê|ÏKÔ&í¤¹Ù‘8!«ãx·œ˜2ð ±8Äêí:?NÑÝÀ/ŽY„áë×ß!ÚñI~.uDJøIÒ­cñ‹Ôœ'®‰¿žºe¹™º´XÌvõéÉ^2©VÌLPóƒxÚ·oX(èîîÉߎ2G29ígX-*ü‹f #C×ëT¼ ¹h>Љ¤G(*Uz+ãâ”·y¤÷äy_cWà|í9u—~ï^hÑ O ®Á2)ü²X•¹ëhâoåKJ€)ËÖK­°9 ¹ôv4}œZNÎã ~_fƒK{¹¤ŽbàgÑÞÔBE‹hä:º%ÉR „Pgõ'$îfû¹«l$”;¾—E {›f T’ÏñW÷§šž2[×’ú–'ˆdJL´q¼-W,Ã#Ò|‹¶[Å9]°…Ûeûè;¶[ïź™g;èߣ&½áEñƒ&Ùò¢Já‰Â©œ“àõ‘¤ê‡Â6ËκFßë><¤{D0'þ|•«¾üÎé²D(3ìÞÊ ‹_ ³F¿5\N´€aq}q•X:¶MŒ‚zð9„Áœ†;§€S-ñ¿JšŠLGQSŽé*!{ä/¶`‘¼üÞ ÓßòÂkõâ"plêÒúÀÂ.¡ø"³j=L·˜G»Èß »<ÄÃ$ “$ñDªy·—ä¸Ы}$¢¡¬òç~tŸæT(âZìÖżë’.g¦ñÓV´N`†³IG?ˆi÷Ù(CÛK³k—Lnb(yrRÍ3§¥s †Ý5äÃgMLÝtƒJ6µdÖV ù¥þ»ä#'¡y|nž¾²Åê)[ýDJ0L£é¨¼ª¾éfïä~qfó*-Âz‡‡©DlWÎj}ŒRH{D½Ó­SyºR30ŽÙlCÈà˜%¬ZÀ¦<]ê|`?ònèÑÒyžè[$_V¶<•M?â¯ÆÓÓë{•^Þ%4ã³i¦~o«o¼à’RQH˜³13”UÝr¯?rüÛ:¯Å^·`êT÷ŒPhkýÃduµN'gܸ‰œåÊ·gKÔnnt[S)BUz0]Æ™-Ç_fó¯Ž.w²fd¦³OÎúÊŒUPûüœÈô*•SÈg»aCtäîÍîÌb0” ›e²ÊÖ6ˆ´²ë ÊÏæîP ¦uá5")ÁÉ¿FB 9"ýYÝŽa”ùG7àž¹ô„*b¾tºÛ·½Ÿ÷FSüº–”ùX¢#û}QEH=x~bvýK -µ—|ž+;÷4:誔­ãT0ýSo{#~M4ìšEÏÌöÈÕDˆXK0:?V!mœÖ…ZÜœshmTLhjÂ}1ÁÀ¶r ±å¶v.ÿ¹Ò-º¬Î”w¦²òò<ñöWjÅ>s®Ø]lI¡ÇìMláä©­=t?{µW‚i³XrQŽ]eè 6Þ}P>ÒÉþÂû–OvT® ×íæ]^ýªx-Á³8!pDxT§W›–0,ÃlKœ ¶¬¨'O”@H‡­W]«Øó¨ÎŸ8Þï6;c]Ì©ßE¡Š‰aÁ:W JlÈβ~F”ÖÙçÆú%¦…Ï+õsÛ´Âkq;¼Ç¤±»‘ÜSŽ‘¨ž…3ùÂ-qb(¿ž €Jå~ÌKm¢'£Aƒí8Üa‘Ž=¦4O–,¾iôÈ1ô€Í 1|®;dÏ¢°±s¿ŸHæj9C c-5 ¯–›•p;Êb}¥Éœ Ôýà+W¦ÒºôA³à½˜ 0šOS#{µ¸Wa&ߤNæ ŽÞœÞ9Íå‘1ôrê]Ù‡†^*â$v V›Ix¸¦@]<¿ èXDsNU¥fD¨Ömܨweñ'ÖéûG}:<1óÅüãuï¿ãÈ&įOŠNÞÁIDç¢Ùçê*èËîaÙÖ•ºíEü×ÇeÕ$!&1?ÏÏß 86`Wg ™B´7ccÊG‡pxÌ´>Ïí <`²-NpgLRåt|Þ)K[o¢ˆØWÏŸÖÁ¾|1t~t´½y¤|Õ€Š>Ž/Á±ùx™ï6Uæù*$µEÓ‚Æø¥-0žÎ6ÜÒ­šv4j£Ãôì®kˆÌÀ奦rHCÁJã\< ;ŒîCŸk9›ÐKˆ²ãõ&÷lJ˜)±‹º2^Ùì+ذeÆ­ D·ÎOËïŠØ³Mï Íxe„à—ÊŽù¶Lp¹Û Ä"ÙFXË´/èÛ' —yÉ#Û¥úµ^¾>ÄœËQäy·õ(Ì•SÍˤÆ-2•=ág‘áh¿Dw!1±Ú ™ÍìÖ->ImƲÈGFì©ÜCèpž‚/§ î|°û™Ü„2ÏÆ-*ƒ@s7Çl|8oá ¾ tƒM©m'Êç8šíY™}Ý#ú–÷6î9'GþSÈì3Dr—¯"#ñ„¡}¢¾7;ú˜wHÖtï(Áïd`É’0Qû.@_V‡8@¡RãªÍQxÿ$;¿fTÆÝøNV£ä8†™yH]Ý­²o 3”­uMeˆIÙzÖÉMHÃùÑVÊÝ¢Þ­‚€³."¥¿ ­ð½d½WýÅÔ@3ÃŒìÔN}v ß™J]îSE|À;NÈž–«¸“‹;4kŽ a›Òb£PŒ”´—d Õ!¢‰êIm°"muº5/c’síZÏU@NÐY›O°—˜S“HvåÕ¥——¨¼ŽéòN‹aŠ¿;k#²V¤à+ùI2Ó¼pÛN%>”Œ´@ß¼_ª ¶2|&—ŽÃa½|% A ÎŽƼâˆWò: m®¹?~Ò§E˜K•V}"Ú­ü!ñk¼Œ>‚Åî¶MêkXš=ýPù¤†Jl†kÕe ÃEÛ4BCßm„‡í0V¿¢ í§Öd3­hS—Uѹ(j„0o‘$’Ò;FârŒ§i»–h‘2’ò}ƒ–Àho¹¯_šöyèp„{šCbG±š^§­ÒG­1iè½Fštr‹ØÒ}VbàœR?EJX}÷mË:gðÐmÆYCÿ˜}b‡ºß9³‚E•m0OÑÏC×Q6VBf1qg^åã(½ë©l."Àx¦³AÍcï#]é˜å%šÂ•°Ë/œ¬39Fb2Jö²ç<±QÜï½m›Ì’9Æäçaã€`qyX%à#q´{¢KNÄÝ+ê )3>?fú½®³' mcuy8S—úôÚL[½¤¡n¹ês;™ >+*HqÏj«”ƒ»•Prºö¹¡ÛÈRë¹z¡ ‘òW{8í¬I™/'.ÝÖÉ8VD!ä3+Êéª?¨Oy29[´bôú¢ãÀN. ¤Èl…¡Ús-ÉÀ#^ê}ü]ü¸4п ™ÞŠd;i,¡/NòòKPœÜÔí33JÔPàÝý~fùKôxÊÉeи¸x¥v/LŠ­Mñ`®Ǧ‘p3ö8²B¨Õ»˜4«Þ-ÉÅ*DZ&¿F"Aúè Âb35½`‰Á¢k4a³‡-MÉU}0ß'4 Y*©€—ó’˜é rhŒÌeë`aæ÷¿¢ÉjªœBû"¹åŸÛ#â, ¦iO+‚c;c0° ã”<ØC™¿O@ü> stream xÚí\mSDzþίØçÔ­ìì¼ÏT¥N•1Æq 1ıãÊ2èFHX‰}~ýí§{%­„Yê~q•ÍîÎNÏt?ý:’µ6®¨ ­§&Æjtba]D'.Xtrác¦Ž­Š1˜&ÁÖÙ`°¥•³;Ôs˜‘‡ÓPy|(´M|ûŠï¥BÓЃˆÚÑ’’MGrÀ8g SE~j £S&ÎÑb+¬ßùÂ8mУ xâ´z@R»T˜H õraRÀ¾*LŽ ëua«jÞVóΈ¸µU$Þ4Öì}a=óƇÂjž¸=o56… ›¶9‚rUµ  g*¼Lá¬5bªsÆà çy¥´Ux¥4•‹¼Ò —"¿K¢È¼Ò@²¨2z±*¼aNÒfhyà öŽÄ¹xïôŽ¥{ÏkжðEM—>jÜK4G’{‘z´Í–"Ö”L4ï‚H‡døž+¢æÕ%_Dc4í"…"&ƒ5¥H=–dJ„ž‘Ø“áÓT´<ͺÈ`õ@¾â¤™™øZE¡ÀÍCèYøÄw©1‹$Ó $m¬<óÆSÑ#QV®*æq> K3¸lx,½æMÀ”xÁ»L¢1”œƒ| .^Ÿ4BÚ P2‰†ºX¶ &ÌgƒM'p‡º4*9ÐduKÄ/¢õɯ Z“-@fÀÉL}‚»"°íŠ Cð"àWž¶X?ˆAÍT '- ]‘€4†À¿óã;êäëu¿PÏF£ñlGßœÎøú`0úkGíŽ'çýIñ±"£Pý¹£ÞöÏfÅG“b™ˆ.Ue"t“Þ”mÀ¥TKÞ?þX¨ãB½ŸŒ µWüKûÿùÏý{$ÉX•Ê='SI¶™fìˆfÐ%p¼ b*½™¦îˆ¦×¥­¬õô™âfš¡#š6•ÀÉ‚¦ e0áIåi³-ÙƒÍJ—Æoæ­IÑL¦Ìa¹O›«’üÌfšaÈFSúªA“TÇÄø´û4¾t0sšÖ–dQ6Ò ¦#šÚ•îuNÓ˜2ê¼™¦ëˆfåJGÖpAS›’làfšé y®27XK° -»ìA&‘¦4d².uܬ¾#í4„Ú”—Úiµ!˜Í4»Úg0¥¥°cA“,>¹ÿÍ4;BYœ2…¥…7>“#s›iÚÇÑô„ÎLÖ5Rì …SÞ•ÞmF¬×Ñ³Žøj…ž3ÄS÷$Z¹ gt‰xšé™\FgžD#ôª\RÈät¤ a³qmÏT3=2@ÙnV×Ñö|re éùLΤÅa¹Ø=R}žžÔžrµÍâKÑ#•ËAàé)ÀŠ-êç:RïbéÉ92=ïKkÍÓâÅz‹#í˶ž]±~× <½­JoZàÙ‘5óšâòZý¼¦˜ÜÄ'ñ†szŽÔ/ûž•/cKœj»¢—|é½ÀÓ‘ï·¦ž¹#zÑ–(?0=R¿l6Çm¾#¼¸@1°°Ó…DpÙ OßÕö\" -ðt>P ·žÞtD´/;§s–BÒÍEèHœ±pèBÏR*§ÃÓîOk8t¡Gê—µ{’0NÏæ‡.ôªPz½ž®êˆ^ „&g³#¸è'ÅIpèB/i‚Ëfr¾#rAß ¹)ñOOj̬Ë%ª°L´/W-¾½+éÙ.ô…º-É™í ÆÁŸ =K¡neŸ–i_ß`5Eº-µ!Û:MÎðçB¯¢Pws¡#p"GBñÔ é^Ê-àì,&:xs¡—LéòfpšŽ\ç›FÀ‰\³Ê›Ái: äç¹&Ó»#Ï´+î^ñQ눳™·…zÿá"WE4U1ºÿÜjÐþx4cbû>%»Cë®ÕEv¹¾@Õ½ÒõjéUÅ4—:šŒÏŽû´³Bííê¤ÿeVü¹Ê £ÞEG='’ýÑlŠóž<™Žo&gý©œ1ð½Ãþù ·;þ"œ Ú1#(?êMèmœð¸•ͦ»7»¶F¾OY?År…´‘t‰d¯ÉÞ¯ô=‚„"ÐF´Ö–¡HHŠHFÓRÖJS$JþR‘<¥HZñ¦ôO½ëŠÀsfJØpÜ¡K>¡‘õ»5ž?PŽiOã¿¥¹OïÒ<$(‰Ïähù¼ Ù™•VWÍAæÑ%!'޶bZ³6#¦p Ù2ÝÄZâÕŸ;=òyúK+‘Vøhõ‚s-­ðÁ^šß¡<È®p=×[p¦¾Ý• ¢Í~sd“!M¡ÖO‰`X™í1msmM0!U°u+wjÑæ›N¾†F gŸŠwÂã,M(…â·¥XcI'Í|yOf–VxBïÕ³×°­Œ´æ­À“7Ùp»¿Â$š¸–÷"²”wÔM ÐæìN‹e-GÊsW!lô¥›‹jñD6 ýz,({Ë÷¿þÀÍ”€ $ ¿Ä1¨!âD¯ˆ•Ak!š@C2¡TÃà¡Ë/[Éû2Ôm²¸#­aãb+~Jþbý/U‰žÀ9¾ŽÆ0@ÙüÑufêävÄjà¶i´<Zöš£l‚¥åé›Ï Ü´´¶?sk2«‹Xº´r'’“Š´A;ßVÀ.êæÄJf+ y<a¿^XG¼H>Y‡úy}/Í}D𳼞ãè¯6ûóË€|°±Ñõ^ƒHã©l@úܲ£«ÄnÓZ8Ué{¶ª·ûiñÕ’ÅkÛ¾ü ©ëö'MÚ«OV^]½WÉÛ;^²®`þe‘©nI“<ËG¾RÄee©8~}O£ý£ÚzÎF›pÄùQ`[ƒw)#·Ú9Š—àfHÖ‘Q%mó­À;¿Ý&ÆìíV €ëÄS·Ñó_PÅ»ÛĈ}H[¯ç^Ð`ŠÒŠ.iÍbUDaê[ÚËÇ]W¿%ðã)š¶ùv«­¹ÀäHbÝ™K±íæ’ŸòÒç“yË÷%$މÑÃ2¶Á‡)R‡ÇNÈ qp!s±‚F¸šª®ÄwÈd˜M|ý‰¡Æ½µ ¹´´Á+f“Þ…Ùtµñd³™«å¸V³ù=¦yÒX)0ÇË Õ@²¸â"Yâ–Ÿjñå›Û„0jì”U1tµÀž¥*#b|7KÀ°Ä…‚× –t¬Mº^ôqh]#­ÌØ|j½ Pf»k¥ië9­ÐjŽ‘;ѱ†UáèZÏ(ŒLœ=s4‘UË8›åàLeO¹1“~¿¦À^O$TS‘ÜæÌΰq'h¦Ôàk“+Í=ÉȌ嶸ªù½¸×|wEr"¡9 ¾ð|F/$V£ÇÎßkr5"…„1R Ì>–Eþ ÇpüL¾®Z°†ãÍÀ·lb46„ЧŒL›Ì£¼ëlæ8R/£‡†IÛŒcÓ6çl ð‚F5"yÆ=ñU®‹XÇš•ða)É}±©\¡Á÷q°Ìîɰ Áy=MÆà X“‡Ú•F™%:†'Ò$ôõ”çuBäù1¤eX»—í*çœL"2¨8³Õ¨éøŒLÀã…ôSsk!UøZ¢¸J’j¼œ-XI‹hÃ’zÏ0ñY(Žz ZÎ6i6%Ø0!W'N#0|#„—¸3$æ´h‹B—ã’“c¯i½$ñL¹ö½\LÊ®íñÝckj¸‡Ãnv`ÙKzþOƒáw¹T泬.±š2€_Š1´a|Ÿ{µ¹•Ã|cl²Ì9—=p0×ÑC‚ˆ5„”¤vcYdH4G%fnØmæLØI¡œá¤ ¥;‚(™?˜4ÞW¶e>׿Èðw;¾I½ˆ‰3Kñüí‹ÀOÃJr+í’+Ž£"TŽ(1‚žÑTÌiRVêð­n–£•8‘L“ŒÃ×ËÇí ‘æàtÕW–Ë› 2º”Sâ8Oa#ËR[Î2€Ïq$Šêˆêô‚z³H|ulž‘ëp±S[Vi˜36aѰ^k.Ïj‰l9ª&%w‘«j0 ѱ{±ì†"×圯ÑJ¼ŽœF+\®ç îú¢Êaø ši¥Í<•Ö銭c®[6é¨f°êzËa¢á u3XD·4¾©¸š3.’}áþŸB»x5ˆ'w·¬‚s#óð×0)7›ïÎé­ÙÇõaÍsãPþ5lÉlqòÒ¬÷ɈFõ®QëËVfX° Åc#5nÖIe4lÜ ÑaK$Aæ¡ Á ÿ¦£âó“Š‹ìÈ¿B–(‹Êg2Ar,ç8qdw£%¦R¶ö­bZîKë›,«Ýâ­vÎý¦9f(XM†HÆö¨¢)Ò÷’é÷’éZîßÀôT _l£/¤‡äqm=£´|‚†º•çÈGZ®e¹\Ÿ€%ö¦t‡CaÄLäÝ+NåHŽÍ1ˆFäªëD©ˆeBäò[æ“VÇ…ÌÄA›‹Ç*9íàxóïè¤+mHq±jÐir£¹#ï8œ‡G€ý3rèEá6ËxÜïŸïföç|'säËï-ÆÊsç3¾r4°ÅÏ„CÒ¯[HoypŽSú½þôl2¸ž'rjÿ¦wEOöN~û}ïåÿ‡ýO³ÝÁÅÅòêt¶ì_ Η³kîÿÕŸ­¼D×áƒÑ¬1é ÏÓëa﫺Æ7ZÃW§«W³eŸÖµèAî/§_^ž®]Îó9ø“LÆç7g³Åšä’†ÍÔô†°4ŒGó‡‹x¼&r·È÷ŽÞ‘È_µ‰Ü.Ì—K÷虽KÏ~Ðn.öhZž®h¯o)Ôì=[¯Þðú’”­?ë­èÛ'u1é÷fýÉ\¹zW§ç=5ìO§¤fW7¤i õº†M.Çв¹nõnH«¾¬q5lÃÕ£ƒw»/„«-ÖËê9WM舫Á·rU8yHÛ¯÷Í›]ÛbÚf‹/^¾úE€ã7îÐÆzƒÖåŽ6˜«Ö BÎÓÕýè­ÎóŸßìÿôŽ÷7Kl.0üŽ¿›ý$ݺ(Ák‚ýÉŠ7¹XEt æÉxÿ^¯ÞÊ ¿y{øZ8‘[œ@žc7ú®,‚{võVFïåoöß¿¥¾m³y®šï°zxŽ.ä[¼Wêç«wt9hÞžnÅËmë$ é_(ý‘||¾é UÿË  þ ÿC¨2Ü"Z™{ÆO[ØØáÍ”‚ÅÏ7ãYÿütÈ£æ2¯–÷å¦D>WÙÈ·Ç@z+ÓýâàðåÁ`£Å ˜¹]ÓÆtØ ‘ ƒÙ F.·½a«[™ðw{G{¿Â„¿mÑs»ÐsºÙª{€ùÀ½ þ]{8Ý„ê£púy-Ê~8¶ÌV>æíÏÏ^ýñ~|po®¨}”ìתåY·;M›óþ®lñ‹aØÆÿ‡˜ˆÏ«NìA ¥ÙÊ«íîž|xýŠyrÒšÝÀìãCGâwh0_ëæãrÁ|ZIó`ö›Aîí÷t™ØHOض½ÝK"Úò(A}£…¾÷'Ó³ñ¤·BmåÈ÷÷?¼~¿¡·*T¶å GžÛõ —1aí¥—M|[ÛÝV®èå›ÃƒSŽ?´–,4gãZ£Àê—Û#Ûñm‘˜k²{×””~(õ&“ñ? ~Ú›´õ†ü=Ár09öÏÆ×_'„ÅaÿŠ–1ÏÒd¾ÁèÓ`4˜}å4Mn] Fäï®n†³Áõð«õ/8åt ±šá\Ín&£éŒ¸¼‰ë[yÅß_ì¾ýE¸Þ–xb: O¨>Ådº`z»`F 3<ά0duËv+¿tðáÃ/‡Ç´å“ö"€_ø%×Uºš`_­YF¸£f †gî†8¸Ç¶-j–Mç²Æ»í²¥'¿¼{Þµz'N¿(}„SÙ>•h:ô¶pïŠiÚ«Þôl0€žÞ\IŸ´é¼O]Xûé_ª7ƒ3"W#ú×®ñrMu 7/àÜ’e]Ä©£ºÑÍÕ)-pq¿óW[’'viv+—öîŸ÷ß1žZ¢òPÃÉ‚Bz4œîÉï.y¯+ãJŽä7ø–ðâžTpEmZÜâj¿ÅMÚïnoÚça®å¬ÈHþ³Bþ]äþ`2KüÿA¯¾ ôkGý>8Ÿ]Nå?QäÁ'ãßF´îsZÓö Z?¹µ"{ÏŠLsE¹ƒ­ÜZ‘__‘N¡‚·XPÊß ¢µzõ-úñ}½Â‘æ²Û~ë¥Ý[ Èë ðMðÓr~û¬^×éë[ ÕUh.@û¦¾k•Ò[ ¸…Is‡ìœþÿbŒ3‡ endstream endobj 1238 0 obj << /Type /ObjStm /N 100 /First 899 /Length 2403 /Filter /FlateDecode >> stream xÚ­Y]oÝ6}¿¿‚7(“C?€¢@óál6¶ãµ½nœ¢ÞÆØhãÂv»ÿ~ÅÑ¥¨K+õužDŠœsfÎ )J2F¥UT†¢rÚ+ ¤ŒÑZÙ„&*v¤lôÊÇÜ*Z¯ « ºœç&e}€å•Á˜ÅHr¸Á”ÑÊx@Ú€‘€iNãf Z9‹))Ò˜ãèM°Š‰QpŠq—là•‡9`xxCÜ1Š|ˆ*ÀG !©àшÁS”ý‹‰•Õ‘T"£¬‰V%F`]önÛ˜V†î¹GÉa'Ê-¸ì5ZÎsÐÁäîDx#¨”‡#.h]EsFFÇ•µ0,´”rì˜C^9—Q CÌ1»¨œ·@6²@;k²>Y?¡è0è.½²Hë¬Å:B €²ñ ‚†y9c‹ørÈ ÑЊyÌ£^N8{†ôЃ¥yLŽ $ɦ„aNè“ò@pÅ@çÐO–ÑgS°ÏÁBö±¤ñ¬yEÈŒçœ9ÂdØ ãƒÅ`ùˆZ"ûˆº É)Wª1hÈbP Áä’J&çÝçJR<­rrCVÝäJp°0U`ˆd€<*ù@ãY£Å˘-æ R.M¤3¤\Î¥®#JÄÜ3¨˜HdÑ`4"çâpXð-Üsi¸çU„F¹ø›[QÅhò*CÍÄDyJ1AÊÕ÷߯öÎþ÷ç•ÚÛ¿ù|¿Ú;ýò¯û¡›ošÕÞ‹Ë»«<¢öNNß÷òððmZ ³_]Ýýz{ýçýÍ-±µ:ÁÀõíÝýËß.o‘¼ÕÞÁ¥t°PW{?]ºÿí«6šaò?<‚ÿÍÇ£ý'à?AýuøÃœ¿¡'7¡GÍsÏnþùùú×›OWj^¾98Êþ„ž;i¼™ªÏ~þêøÕ?Ž3{/dæì†5hJOß@“¿ÿøöãü9=覕;÷È45‚ð7ðèÅ‹³‹woÎÎú>m•¬MO<­3÷É>Þ§ýý‹w^eŸNûm±Ó\#’ÿ"½9:A®äJ‰&Ùñ²2>Pdå#ëø5"Û0Ñ”i|@Ù,eßrV¶ÿ eóO ár°>` ‹DX¼“þXræë¡èYò!ý$5•$²}¦²,¡Mad§ß,ÊM’fï¿Üÿ~ý9c GŽá}xð*Ÿ9†ï$C¯¤íõýï8m°¼øýˆ¦˜Õèäpr|{õŸá3Ëôd"殚›Es'­£«ÿV§f`zæÂ27`=Ïœ¯`v Œ¢›‚‰Ÿ30ª`º³ä§ŽÙرŸØ°¶aѺ Ë™V ˺E,šbõý²Ë,aQ“;ñr†UsG±%ÖÔ±ßò²uÕ&;â M×Õ±RéãV*ý9ÏIj¸¤—HLœ:,î·X¦¦Ôø%,ݤ”zÁ߉2V[©kñ«W¦–¦ÑKÖº‰ªRS£c¥"Ææ»µ®iг'Ä[ÂÕ½õFøÍ¯©®õæ‹n Ww„¿ÂXvË4Xº‡µ9p˜ñÚÇ’ïkô²Åбbñ"–m°LËU,ÓÇ*Ö1ô¬7‡wB¿ D“欶q¬„vKa‚¯$‹/d†›<Œ;žp†ÔpƆ“æœ5]~–®Íëê@é{²øš Ï‹ÖM‚B/A¾&È›%,nÒÕ÷«¦‹Ã"7X×dÃ5+lûXÅšSϺêëÒbN›WÛMUINyzpõ{à5θš7ËŠmv/׋×Õ<8³dm›<¸^\ÍÃì½~nדú&oìCëA¤7ZvºF϶ŽùG—\Ý©Ÿ×ÏÍ3U F­ŸÓ3eä‡À:ßwÒÔÏ”+ïtè` ŒmŒ©÷®ÿ¸¾!óÐ/s.cS¤˜à`k¥Íhdm–v@ÛK;¢æ\2ms%p•¢Tk¸é’‹üŸZu~ìäXÆù@z‹ yh‹‹Š|!\B‰"!!”(!B‘ÖkB(qô ÑÏ©2bÚ¢‚còw`mIÙ®ÑF$,ãבD‰ÊæH$* P¦4çÊ bh›Šs5ˆûÖçÎH€XX>:®-‚a?NKyš„:»­b†]wèÂá1ÙÎdœ±ƒx8ޏËò}írDò1}í8W2Ïù2nÿŽvA endstream endobj 1294 0 obj << /Producer (pdfTeX-1.40.16) /Creator (TeX) /CreationDate (D:20181006172917+02'00') /ModDate (D:20181006172917+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) kpathsea version 6.2.1) >> endobj 1252 0 obj << /Type /ObjStm /N 42 /First 409 /Length 2181 /Filter /FlateDecode >> stream xÚ­Y[sÛ¶~÷¯àcüàA·3Î$NâfZ;IóÔt2K<æEåÅŽÿ}wA¬$’ë¶ç%‹Ýïû° ˜%œEqÄžFŒ1ldQ’dØàQšrlˆ(Ë6dÄ¹Æ†Š„L°¡#©ÐYÄ‘Ò#Žå´À) ) 6m |Ubý8¤aLˆ’ lÉ(Q1¢*Jce[PhÈ8Je†Y%‹²˜a‘%1Εi”¥Ú¶²(ãv®äQ&%“@A 80™Hñ4³- ¼lÁ4.l6ÎuÌ ‡J ¥1ŠJ#[FÀY0èD2ÙD$R‚) Ω¡DbmZV*ƒx õÔ,òÐI$4CÌ$g?üp¶¸ÉkÓG¿½ÊÄ9¤K`~^e;ÊuÔ9ˆ,]GÃHêÜ8´Çèdgü~¶ø¥¬Ë¢âØïg?þè¥ã æf±›œàdí:)tÉÀMPó ‡Š#^Ð}–ãâX˜)IÊ”æ:;ŽFuP’±s ;"HQq,H'€’d4ÙRJ](É]:އJ@r™ ×È2ãó„Ç„@Irî&[JÙÔAâ.ƒÄUJœ“dØqé$âU?ŒŠcA:i)¹Å—@IY ”ñ“Ýœ ¨ŒFv‚„Ç„–’ãs3Zœ-¬NJ;¥U‚AÀi䃰8äSÀIÇŽ Nš*§›NšªU)ì8y•ÆŽž'ĸ8$ÔX`ÓT ”têXh†D%9 :ÅŽW#^|H†Âlå @¸JŒ>~-qˆ:öãWØëe;_ã,6ÿû<šÑ”ÍÛŸòâ>_œë ½.î›ö±2«um𡇑p½Gà }SvÃæbeòaƒ©¶][˜¾Çæ×W—_®/¿žŸG sÂ?çüÖ93åÖïM;6+;øºÉ«§¾˜)í —mS˜­%ü¡Y™ï0Ä“ÝÐP6c;ö_ÊÚŠqw÷í¶.7yÙ@ „ê½»r9N««±\™ªlŒ%™‹òºÏÅ ô»l·Oàø©\ÞšSµ[Ô'÷íØpß–}Ñ™Á”=š©¯ãpbßþ@4¶º e°ºî;~_v½…¼Íûêí”ÿTÛ‡ªîDxaŒ@Å¿˜Fì’Ø}¹ïǦʶñêÇÕÝ•iLW¶ðªuەæÆÒ£söª»mðCÌhËûÐôC^U9̫ڕ¨n‡¼-Ïñt|ΰéÚqmkêc1äf"c¿[lÖy­]M<õƒ©1\°«¼P‰ÿ€`>@á·«q§íÐÚ½è¿8åô»Î›1¯Ð^`@2ŠÂrvæµÉwe¸Ÿ/û¶ÛR΃J£SðeÓö߀[Øë±Ême§\Vùô_·ð-c=Äöϰ6V #üï*¶’ÐÚÀ•èÍÿÓ”íâ}ÛÕ»L‚î Ÿo÷Nl¿ûž×Áî£nG><&nÌðØv÷v­R.‹{»àXÁ»½ WÄò¯æÎt¦±;Tš’œ`r8-`[lìý€«[ˆpbð=óoô?$wk+§¤Ž::ÚmQŒÛ¼)žÜŽ¾Ì—eUe¸Ñ±¿9s¦¹­ûv¬ë¼{“8ÊÑÞùº|™Nö×ýS]›ÁmQ׋ëE½'(¥CéÜß5ëÞØ¥Ã2«\è2J.]•7ë‹7¾S&9]Î"ùÉ®W æ£á3‡Ÿê¹Gp{Ñ“!O ‡üÔ©ž‡ÅÏž‹H—²¹ó\xÅ_‘,ŒQÏÓØ°C]ÀîÛÁfkOóòsxúsDÈ€ø¿HŠû÷Cí7ZW«¶¸(†º€C•~Q’i¹Bcæ‹Íýg0ó™2÷è­}óÝv« ÕùçȽØ$4÷«aÎXÖßN&g0‡Üá—þ«I•$óMVúBFPå˜Yp“÷ñøþGÁ¯öb¦³Ì“˜<ö­Ž)Ó¾Ù1Í„oÞ1¥ŒÝ§Î#³cø÷½¢7v§ZBüÃúš¬&8ÿGSTmW3I¿œ¹Î—9¾d¾uÙ/ñ)@ûÖÙQáwhâÆ±ú!Ç—”Yx°æ[|þð‘×ͶE³H}3Xë®´‚Ϧ?>ï0o w\Ócv°<ïS z'/f_Ø\«™.øž•†æj…¾=ê(ù,ÈZ±à'Dž÷Ið$ô¬Dо¬Z¼\É`røö­-ˆz’Ÿûò×ö¾‹w§ô'\þ„,¦¥WžH5üŠÇk›Ðþ¶ÆZ˜™¦Z`3ë¾t„7°5 z'Ç‘[,‡®'0·¨ŠôSº¢d~>ª/æ[÷Òz Ñ·ÕƒÁoûÐÚçu Äyø&ºsèys_¯9\ã¾Þ -I=[Íðø‘3Û=îDþd¸*ß¡•ûÖw²ãÕ=8ð<…µ®1se}W®ÿ“o+|W”{K·ëoýc9ûk\¥£ÛöÑtø~È÷¶?šoÓöù­·÷oHAGµÆEßÊS,,¼cs>èóh–$ÝgË·€=^wsf¾»à?—+ðcÉôûßg955$55‚{ë®E†u§%£Û²ýs‹kPFNypŠdñì¥w—0qÂ䮢ö2®A)ErôA÷%oU”OjA¨¡¤“ LB~åùË›û.#ñ‘ÄG™PƒP…r8yÿ=z’QRI¤$‘’DJ’Ð’€©øùc繚¦„áÑõâŠU¤‚"­"ŠhL{P±/‚¨þ9D’JÇ'Ó™þÖôàÃÜ/|²~yÚšhq™yծϟàêŽNÓ®¶ø8¶vÑ”N¦iã°c³}œ‚ÏÑ⿽! ÿ'ÆÀï endstream endobj 1295 0 obj << /Type /XRef /Index [0 1296] /Size 1296 /W [1 3 1] /Root 1293 0 R /Info 1294 0 R /ID [ ] /Length 3124 /Filter /FlateDecode >> stream xÚ%˜klG†÷ì~¾ÅÎŹَã$ÎÅv.Î݉'vâ8Ž'cÇ—ØNœ8Ž[µ*…‚jD+AAh…¸Œ@TD)"tû¡RQi¢ü€zA AÛ ZJ©T µBð=oÿ<š9³ß~»;Ï9³³QEÿ³(ZY?]F…‹â(ª1PîV¥ån)Ü(cÉ,j© »TÇhJ ¶¨f¿ªÀ2b•  Tƒ Z ,+ÀJ° ÔƒÕ` X Öõ 4‚&°4ƒ l›ÁÐ ¶‚m`;ØÚ@;è;Á.°ìûÁPaÑò!=—Ýó€bL^ÎZ›3µù´Ùc¿ÕÀ¼™—f9s™3—9“œ³¸æz¡bIÍç̾Efß|(¢þé7;]§«i¾`ñçÐh P Ìì™×5 —‰5´–*³ i Ô€ ÖìgÿÔ¯=]«Àj°Òì—èkAXcö» ¬ëAà•©«ÑìÏÕh3Ø6€°l›ÍþñW·´r¹ú`'ØnöŸ/évÐÚ@'Øeq² ÑÝ`Øöƒ.°×âã:ä8ƒ£à88bqÓs:D‹Í1Ð z,n{P,]}œR—5¥Ko-ºýsàŒÅ}= Áyp Yu`Ðâ÷¦õ³!0Ìë!bNŠ9éˆ%•ÿÒ!3–ÔKÑURJ1'²dÝã@ŸtÚ’ ?UwÌZ²mµºø’Þ` ,Wÿö}ŠáU*‡&]°¤›…*iM@%ˆ,é?®X *,¹ób96Ü¡X¨5`™%cÒÀrPkÉìÕ­k,Y˜TwX VzKîÍ5°¬¶äÁ*u×mtšhmA‹%;«C@#Ð!,ùÄm ´‚fK>;®î ×²í`«%¾£m ì°ä‹Gk;Á.°ìûÁApèâèÇAGù,Ïë,»A'Ø€C  œý`œçÀy0 .0 ÆA%ßø€Nœ}à48Á¸.ô¦: &,ùÁû·:´­Ú@ë(»öô›ÕÆø:¸ Ê6¥ÖÀ˜·äÇOª[Ö'ñâËn¼ôAbÞ¬t®Q­ XòûvuÙh{¤ñ•–¼VRLkšiÕ‚KÞ|[˾ø:KÞ­Q ¹|=Xi¥Ò{Š!’Ç¿ÚJ«®*¶ ˆ_g¥æ—Ã0*žûõúËÐh¥¶a²‘k©¸æ1Ço²Òþ»4Š„~+ÀM~@H¾ G‡<2xDòá±É£…G)¯<‚xäò|ŠðÝàÀ0ß°Î3ûõ< x”òxàñÊ#ƒG.\-<†yÜðhæÄãšÇpU<Öy|ñhæI~ £¿ÐÇ£”ŸøâqÈÏÌñÔ?pÈÏùž’ã{‰c3àÀNÝñŠãxÓw¸áªÛu· 0=®,ì_NÜ*PV6£Œ¸õ 4¶ënàˉcâ] `ÏîxÁu[‹’Û Ø¸»í€íºkí ììÙ_S›× ö6în?`»îØö¹C€}²ël‘ÝQÀ†Ò±…wì‰wÇvرcvì„]`÷îxaqliÝ9ÀnÖ±]wld ‹cëØ;¶¯nÈÖ²ÙÓn‚g¿YéÆCš”QpŒ>Ç8ía'Á8k¥Ñ­:˜ âfÀUp ðµÌñyÌé[;>LJÇ7KÇÛºC ý \F@€ (P  @@€ (P  @@€ (P  @@€ (P  @@€ (P èó, (P  @ÐÄO[iâ'‘Uz^Ï€Ù‡­tÏSêbD@†€ 2dÈ! C@†€ A{!}¸äcCg‚ Î[éÞ6ýÑ+=ý]µ†­ôÖ-µ.ZEÃ+j]²ŠÙÕrVñH³Z#VñÄ×ÕµŠ_½»loÌ©5f•#oª5n•ú¯ZVùÜýjMZUe«ZW¬êü÷Õš²ª»ßÿ.0mUŸoWkƪn÷©uÕªÞzK­kV=øŒZ³Výx!m™­%}dÓŽ”ÙZÒ[¤¾Ìêë >6è› ê-i£ˆzEùÙ?ùsÎRà_þøWà_þøWà_þøWà_þøWà_þøWà_þøWà_þøWpGwTpGwTpGþøWà_þøWà_±Óª¿ó|ù¶Ò¢ÿÐu¼@ endstream endobj startxref 567996 %%EOF queueing/doc/queueingnetworks.texi0000664000175000017500000035334413356152302017355 0ustar morenomoreno@c This file has been automatically generated from queueingnetworks.txi @c by proc.m. Do not edit this file, all changes will be lost @c -*- texinfo -*- @c Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2016, 2018 Moreno Marzolla @c @c This file is part of the queueing package. @c @c The queueing package is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public License @c as published by the Free Software Foundation; either version 3 of @c the License, or (at your option) any later version. @c @c The queueing package is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied warranty @c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with the queueing package; see the file COPYING. If not, see @c . @node Queueing Networks @chapter Queueing Networks @menu * Introduction to QNs:: A brief introduction to Queueing Networks * Single Class Models:: Queueing models with a single job class * Multiple Class Models:: Queueing models with multiple job classes * Generic Algorithms:: High-level functions for QN analysis * Bounds Analysis:: Computation of asymptotic performance bounds * QN Analysis Examples:: Queueing Networks analysis examples @end menu @cindex queueing networks @c @c INTRODUCTION @c @node Introduction to QNs @section Introduction to QNs Queueing Networks (QN) are a simple modeling notation that can be used to analyze many kinds of systems. In its simplest form, a QN is made of @math{K} service centers; center @math{k} has a queue connected to @math{m_k} (usually identical) servers. Arriving customers (requests) join the queue if there is at least one slot available. Requests are served according to a (de)queueing policy (e.g., FIFO). After service completes, requests leave the server and can join another queue or exit from the system. Service centers where @math{m_k = \infty} are called @emph{delay centers} or @emph{infinite servers}. In this kind of centers, there is always one available server, so that queueing never occurs. Requests join the queue according to a @emph{queueing policy}, such as: @table @strong @item FCFS First-Come-First-Served @item LCFS-PR Last-Come-First-Served, Preemptive Resume @item PS Processor Sharing @item IS Infinite Server (@math{m_k = \infty}). @end table Queueing networks can be @emph{open} or @emph{closed}. In open networks there is an infinite population of requests; new customers are generated outside the system, and eventually leave the network. In closed networks there is a fixed population of request that never leave the system. Queueing models can have a single request class (@emph{single class models}), meaning that all requests behave in the same way (e.g., they spend the same average time on each particular server). In @emph{multiple class models} there are multiple request classes, each with its own parameters (e.g., with different service times or different routing probabilities). Furthermore, in multiclass models there can be open and closed chains of requests at the same time. A particular class of QN models, @emph{product-form} networks, is of particular interest. Product-form networks fulfill the following assumptions: @itemize @item The network can consist of open and closed job classes. @item The following queueing disciplines are allowed: FCFS, PS, LCFS-PR and IS. @item Service times for FCFS nodes must be exponentially distributed and class-independent. Service centers at PS, LCFS-PR and IS nodes can have any kind of service time distribution with a rational Laplace transform. Furthermore, for PS, LCFS-PR and IS nodes, different classes of customers can have different service times. @item The service rate of an FCFS node is only allowed to depend on the number of jobs at this node; in a PS, LCFS-PR and IS node the service rate for a particular job class can also depend on the number of jobs of that class at the node. @item In open networks two kinds of arrival processes are allowed: i) the arrival process is Poisson, with arrival rate @math{\lambda} that can depend on the number of jobs in the network. ii) the arrival process consists of @math{C} independent Poisson arrival streams where the @math{C} job sources are assigned to the @math{C} chains; the arrival rate can be load dependent. @end itemize Product-form networks are attractive because steady-state performance measures can be efficiently computed. @c @c Single Class Models @c @node Single Class Models @section Single Class Models In single class models, all requests are indistinguishable and belong to the same class. This means that every request has the same average service time, and all requests move through the system with the same routing probabilities. @noindent @strong{Model Inputs} @table @asis @item @math{@lambda_k} (Open models only) External arrival rate to service center @math{k}. @item @math{@lambda} (Open models only) Overall external arrival rate to the system as a whole: @math{\lambda = \sum_k \lambda_k}. @item @math{N} (Closed models only) Total number of requests in the system. @item @math{S_k} Average service time. @math{S_k} is the average service time at center @math{k}. In other words, @math{S_k} is the average time elapsed from service start to service completion at center @math{k}. @item @math{P_{i, j}} Routing probability matrix. @math{{\bf P} = [P_{i, j}]} is a @math{K \times K} matrix where @math{P_{i, j}} is the probability that a request completing service at server @math{i} will move directly to server @math{j}. The probability that a request leaves the system after being served at center @math{i} is @math{1-\sum_{j=1}^K P_{i, j}}. @item @math{V_k} Mean number of visits to center @math{k} (also called @emph{visit ratio} or @emph{relative arrival rate}). @end table @noindent @strong{Model Outputs} @table @math @item U_k Service center utilization. @math{U_k} is center @math{k} utilization. The utilization is defined as the fraction of time in which the resource is busy (i.e., the server is processing requests). If center @math{k} is a single-server or multiserver node, then @math{0 @leq{} U_k @leq{} 1}. If center @math{k} is an infinite server node (delay center), then @math{U_k} denotes the @emph{traffic intensity} and is defined as @math{U_k = X_k S_k}; in this case the utilization may be greater than one. @item R_k Average response time. @math{R_k} is the average response time of center @math{k}. The average response time is defined as the average time between the arrival of a request in the queue and service completion of the same request. @item Q_k Average number of customers. @math{Q_k} is the average number of requests in center @math{k}. This includes both the requests in the queue, and those being served. @item X_k Throughput. @math{X_k} is center @math{k} throughput. The throughput is the ratio of job completions over time, i.e., the average number of jobs completed over a fixed time interval. @end table @noindent Given the output parameters above, additional performance measures can be computed: @table @math @item X System throughput, @math{X = X_k / V_k} for any @math{k} for which @math{V_k \neq 0} @item R System response time, @math{R = \sum_{k=1}^K R_k V_k} @item Q Average number of requests in the system, @math{Q = \sum_{k=1} Q_k}; for closed systems, this can be written as @math{Q = N-XZ}; @end table For open, single class models, the scalar @math{\lambda} denotes the external arrival rate of requests to the system. The average number of visits @math{V_j} satisfy the following equation: @iftex @tex $$ V_j = P_{0, j} + \sum_{i=1}^K V_i P_{i, j} \quad j=1, \ldots, K $$ @end tex @end iftex @ifnottex @example @group K ___ \ V_j = P_(0, j) + > V_i P_(i, j) j=1,...,K /___ i=1 @end group @end example @end ifnottex @noindent where @math{P_{0, j}} is the probability that an external request goes to center @math{j}. If we denote with @math{\lambda_j} the external arrival rate to center @math{j}, and @math{\lambda = \sum_j \lambda_j} the overall external arrival rate, then @math{P_{0, j} = \lambda_j / \lambda}. For closed models, the visit ratios satisfy the following equation: @iftex @tex $$\left\{\eqalign{V_j & = \sum_{i=1}^K V_i P_{i, j} \quad j=1, \ldots, K \cr V_r & = 1 \quad \hbox{for a selected reference station $r$}}\right. $$ @end tex @end iftex @ifnottex @example / | K | ___ | \ | V_j = > V_i P_(i, j) j=1,...,K | /___ | i=1 | | V_r = 1 for a selected reference station r \ @end example @end ifnottex Note that the set of traffic equations @math{V_j = \sum_{i=1}^K V_i P_{i, j}} alone can only be solved up to a multiplicative constant; to get a unique solution we impose an additional constraint @math{V_r = 1} for some @math{1 @leq{} r @leq{} K}. This constraint is equivalent to defining station @math{r} as the @emph{reference station}; the default is @math{r=1}, @pxref{doc-qncsvisits}. A job that returns to the reference station is assumed to have completed its activity cycle. The network throughput is set to the throughput of the reference station. @anchor{doc-qncsvisits} @deftypefn {Function File} {@var{V} =} qncsvisits (@var{P}) @deftypefnx {Function File} {@var{V} =} qncsvisits (@var{P}, @var{r}) Compute the mean number of visits to the service centers of a single class, closed network with @math{K} service centers. @strong{INPUTS} @table @code @item @var{P}(i,j) probability that a request which completed service at center @math{i} is routed to center @math{j} (@math{K \times K} matrix). For closed networks it must hold that @code{sum(@var{P},2)==1}. The routing graph must be strongly connected, meaning that each node must be reachable from every other node. @item @var{r} Index of the reference station, @math{r \in @{1, @dots{}, K@}}; Default @code{@var{r}=1}. The traffic equations are solved by imposing the condition @code{@var{V}(r) = 1}. A request returning to the reference station completes its activity cycle. @end table @strong{OUTPUTS} @table @code @item @var{V}(k) average number of visits to service center @math{k}, assuming @math{r} as the reference station. @end table @end deftypefn @anchor{doc-qnosvisits} @deftypefn {Function File} {@var{V} =} qnosvisits (@var{P}, @var{lambda}) Compute the average number of visits to the service centers of a single class open Queueing Network with @math{K} service centers. @strong{INPUTS} @table @code @item @var{P}(i,j) is the probability that a request which completed service at center @math{i} is routed to center @math{j} (@math{K \times K} matrix). @item @var{lambda}(k) external arrival rate to center @math{k}. @end table @strong{OUTPUTS} @table @code @item @var{V}(k) average number of visits to server @math{k}. @end table @end deftypefn @c @c @c @noindent @strong{EXAMPLE} @float Figure,fig:qn_closed_single @center @image{qn_closed_single,3in} @caption{Closed network with a single class of requests} @end float @ref{fig:qn_closed_single} shows a closed queueing network with a single class of requests. The network has three service centers, labeled @emph{CPU}, @emph{Disk1} and @emph{Disk2}, and is known as a @emph{central server} model of a computer system. Requests spend some time at the CPU, which is represented by a PS (Processor Sharing) node. After that, requests are routed to Disk1 with probability @math{0.3}, and to Disk2 with probability @math{0.7}. Both Disk1 and Disk2 are FCFS nodes. If we label the servers as CPU=1, Disk1=2, Disk2=3, we can define the routing matrix as follows: @iftex @tex $$ P = \pmatrix{ 0 & 0.3 & 0.7 \cr 1 & 0 & 0 \cr 1 & 0 & 0 } $$ @end tex @end iftex @ifnottex @example / 0 0.3 0.7 \ P = | 1 0 0 | \ 1 0 0 / @end example @end ifnottex The visit ratios @math{V}, using station 1 as the reference station, can be computed with: @example @verbatim P = [0 0.3 0.7; ... 1 0 0 ; ... 1 0 0 ]; V = qncsvisits(P) @end verbatim @result{} V = 1.00000 0.30000 0.70000 @end example @noindent @strong{EXAMPLE} @float Figure,fig:qn_open_single @center @image{qn_open_single,3in} @caption{Open Queueing Network with a single class of requests} @end float @ref{fig:qn_open_single} shows a open QN with a single class of requests. The network has the same structure as the one in @ref{fig:qn_closed_single}, with the difference that here we have a stream of jobs arriving from outside the system, at a rate @math{\lambda}. After service completion at the CPU, a job can leave the system with probability @math{0.2}, or be transferred to other nodes with the probabilities shown in the figure. The routing matrix is @iftex @tex $$ P = \pmatrix{ 0 & 0.3 & 0.5 \cr 1 & 0 & 0 \cr 1 & 0 & 0 } $$ @end tex @end iftex @ifnottex @example / 0 0.3 0.5 \ P = | 1 0 0 | \ 1 0 0 / @end example @end ifnottex If we let @math{\lambda = 1.2}, we can compute the visit ratios @math{V} as follows: @example @verbatim p = 0.3; lambda = 1.2 P = [0 0.3 0.5; ... 1 0 0 ; ... 1 0 0 ]; V = qnosvisits(P,[1.2 0 0]) @end verbatim @result{} V = 5.0000 1.5000 2.5000 @end example Function @command{qnosvisits} expects a vector with @math{K} elements as a second parameter, for open networks only. The vector contains the arrival rates at each individual node; since in our example external arrivals exist only for node @math{S_1} with rate @math{\lambda = 1.2}, the second parameter is @code{[1.2, 0, 0]}. @c @c Open Networks @c @subsection Open Networks Jackson networks satisfy the following conditions: @itemize @item There is only one job class in the network; the total number of jobs in the system is unbounded. @item There are @math{K} service centers in the network. Each service center may have Poisson arrivals from outside the system. A job can leave the system from any node. @item Arrival rates as well as routing probabilities are independent from the number of nodes in the network. @item External arrivals and service times at the service centers are exponentially distributed, and in general can be load-dependent. @item Service discipline at each node is FCFS @end itemize We define the @emph{joint probability vector} @math{\pi(n_1, @dots{}, n_K)} as the steady-state probability that there are @math{n_k} requests at service center @math{k}, for all @math{k=1, @dots{}, N}. Jackson networks have the property that the joint probability is the product of the marginal probabilities @math{\pi_k}: @iftex @tex $$ \pi(n_1, \ldots, n_K) = \prod_{k=1}^K \pi_k(n_k) $$ @end tex @end iftex @ifnottex @example @var{joint_prob} = prod( @var{pi} ) @end example @end ifnottex @noindent where @math{\pi_k(n_k)} is the steady-state probability that there are @math{n_k} requests at service center @math{k}. @anchor{doc-qnos} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnos (@var{lambda}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnos (@var{lambda}, @var{S}, @var{V}, @var{m}) @cindex open network, single class @cindex BCMP network Analyze open, single class BCMP queueing networks with @math{K} service centers. This function works for a subset of BCMP single-class open networks satisfying the following properties: @itemize @item The allowed service disciplines at network nodes are: FCFS, PS, LCFS-PR, IS (infinite server); @item Service times are exponentially distributed and load-independent; @item Center @math{k} can consist of @code{@var{m}(k) @geq{} 1} identical servers. @item Routing is load-independent @end itemize @strong{INPUTS} @table @code @item @var{lambda} Overall external arrival rate (@code{@var{lambda}>0}). @item @var{S}(k) average service time at center @math{k} (@code{@var{S}(k)>0}). @item @var{V}(k) average number of visits to center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{i}. If @code{@var{m}(k) < 1}, enter @math{k} is a delay center (IS); otherwise it is a regular queueing center with @code{@var{m}(k)} servers. Default is @code{@var{m}(k) = 1} for all @math{k}. @end table @strong{OUTPUTS} @table @code @item @var{U}(k) If @math{k} is a queueing center, @code{@var{U}(k)} is the utilization of center @math{k}. If @math{k} is an IS node, then @code{@var{U}(k)} is the @emph{traffic intensity} defined as @code{@var{X}(k)*@var{S}(k)}. @item @var{R}(k) center @math{k} average response time. @item @var{Q}(k) average number of requests at center @math{k}. @item @var{X}(k) center @math{k} throughput. @end table @strong{REFERENCES} @itemize @item G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998 @end itemize @seealso{qnopen,qnclosed,qnosvisits} @end deftypefn From the results computed by this function, it is possible to derive other quantities of interest as follows: @itemize @item @strong{System Response Time}: The overall system response time can be computed as @iftex @tex $R_s = \sum_{k=1}^K V_k R_k$ @end tex @end iftex @ifnottex @code{R_s = dot(V,R);} @end ifnottex @item @strong{Average number of requests}: The average number of requests in the system can be computed as: @iftex @tex $$Q_{avg} = \sum_{k=1}^K Q_k$$ @end tex @end iftex @ifnottex @code{Q_avg = sum(Q)} @end ifnottex @end itemize @noindent @strong{EXAMPLE} @example @verbatim lambda = 3; V = [16 7 8]; S = [0.01 0.02 0.03]; [U R Q X] = qnos( lambda, S, V ); R_s = dot(R,V) # System response time N = sum(Q) # Average number in system @end verbatim @print{} R_s = 1.4062 @print{} N = 4.2186 @end example @c @c Closed Networks @c @subsection Closed Networks @anchor{doc-qncsmva} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsmva (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsmva (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsmva (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @cindex Mean Value Analysys (MVA) @cindex closed network, single class @cindex normalization constant Analyze closed, single class queueing networks using the exact Mean Value Analysis (MVA) algorithm. The following queueing disciplines are supported: FCFS, LCFS-PR, PS and IS (Infinite Server). This function supports fixed-rate service centers or multiple server nodes. For general load-dependent service centers, use the function @code{qncsmvald} instead. Additionally, the normalization constant @math{G(n)}, @math{n=0, @dots{}, N} is computed; @math{G(n)} can be used in conjunction with the BCMP theorem to compute steady-state probabilities. @strong{INPUTS} @table @code @item @var{N} Population size (number of requests in the system, @code{@var{N} @geq{} 0}). If @code{@var{N} == 0}, this function returns @code{@var{U} = @var{R} = @var{Q} = @var{X} = 0} @item @var{S}(k) mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). @item @var{V}(k) average number of visits to service center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{Z} External delay for customers (@code{@var{Z} @geq{} 0}). Default is 0. @item @var{m}(k) number of servers at center @math{k} (if @var{m} is a scalar, all centers have that number of servers). If @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); otherwise it is a regular queueing center (FCFS, LCFS-PR or PS) with @code{@var{m}(k)} servers. Default is @code{@var{m}(k) = 1} for all @math{k} (each service center has a single server). @end table @strong{OUTPUTS} @table @code @item @var{U}(k) If @math{k} is a FCFS, LCFS-PR or PS node (@code{@var{m}(k) @geq{} 1}), then @code{@var{U}(k)} is the utilization of center @math{k}, @math{0 @leq{} U(k) @leq{} 1}. If @math{k} is an IS node (@code{@var{m}(k) < 1}), then @code{@var{U}(k)} is the @emph{traffic intensity} defined as @code{@var{X}(k)*@var{S}(k)}. In this case the value of @code{@var{U}(k)} may be greater than one. @item @var{R}(k) center @math{k} response time. The @emph{Residence Time} at center @math{k} is @code{@var{R}(k) * @var{V}(k)}. The system response time @var{Rsys} can be computed either as @code{@var{Rsys} = @var{N}/@var{Xsys} - Z} or as @code{@var{Rsys} = dot(@var{R},@var{V})} @item @var{Q}(k) average number of requests at center @math{k}. The number of requests in the system can be computed either as @code{sum(@var{Q})}, or using the formula @code{@var{N}-@var{Xsys}*@var{Z}}. @item @var{X}(k) center @math{K} throughput. The system throughput @var{Xsys} can be computed as @code{@var{Xsys} = @var{X}(1) / @var{V}(1)} @item @var{G}(n) Normalization constants. @code{@var{G}(n+1)} contains the value of the normalization constant @math{G(n)}, @math{n=0, @dots{}, N} as array indexes in Octave start from 1. @math{G(n)} can be used in conjunction with the BCMP theorem to compute steady-state probabilities. @end table @strong{NOTES} In presence of load-dependent servers (i.e., if @code{@var{m}(k)>1} for some @math{k}), the MVA algorithm is known to be numerically unstable. Generally, this issue manifests itself as negative values for the response times or utilizations. This is not a problem of the @code{queueing} toolbox, but of the MVA algorithm, and has currently no known solution. This function prints a warning if numerical problems are detected; the warning can be disabled with the command @code{warning("off", "qn:numerical-instability")}. @strong{REFERENCES} @itemize @item M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313--322. @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} @end itemize This implementation is described in R. Jain , @cite{The Art of Computer Systems Performance Analysis}, Wiley, 1991, p. 577. Multi-server nodes are treated according to G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, Section 8.2.1, "Single Class Queueing Networks". @seealso{qncsmvald,qncscmva} @end deftypefn @noindent @strong{EXAMPLE} @example @verbatim S = [ 0.125 0.3 0.2 ]; V = [ 16 10 5 ]; N = 20; m = ones(1,3); Z = 4; [U R Q X] = qncsmva(N,S,V,m,Z); X_s = X(1)/V(1); # System throughput R_s = dot(R,V); # System response time printf("\t Util Qlen RespT Tput\n"); printf("\t-------- -------- -------- --------\n"); for k=1:length(S) printf("Dev%d\t%8.4f %8.4f %8.4f %8.4f\n", k, U(k), Q(k), R(k), X(k) ); endfor printf("\nSystem\t %8.4f %8.4f %8.4f\n\n", N-X_s*Z, R_s, X_s ); @end verbatim @end example @c @c MVA for single class, closed networks with load dependent servers @c @anchor{doc-qncsmvald} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvald (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvald (@var{N}, @var{S}, @var{V}, @var{Z}) @cindex Mean Value Analysys (MVA) @cindex MVA @cindex closed network, single class @cindex load-dependent service center Mean Value Analysis algorithm for closed, single class queueing networks with @math{K} service centers and load-dependent service times. This function supports FCFS, LCFS-PR, PS and IS nodes. For networks with only fixed-rate centers and multiple-server nodes, the function @code{qncsmva} is more efficient. @strong{INPUTS} @table @code @item @var{N} Population size (number of requests in the system, @code{@var{N} @geq{} 0}). If @code{@var{N} == 0}, this function returns @code{@var{U} = @var{R} = @var{Q} = @var{X} = 0} @item @var{S}(k,n) mean service time at center @math{k} where there are @math{n} requests, @math{1 @leq{} n @leq{} N}. @code{@var{S}(k,n)} @math{= 1 / \mu_{k}(n)}, where @math{\mu_{k}(n)} is the service rate of center @math{k} when there are @math{n} requests. @item @var{V}(k) average number of visits to service center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{Z} external delay ("think time", @code{@var{Z} @geq{} 0}); default 0. @end table @strong{OUTPUTS} @table @code @item @var{U}(k) utilization of service center @math{k}. The utilization is defined as the probability that service center @math{k} is not empty, that is, @math{U_k = 1-\pi_k(0)} where @math{\pi_k(0)} is the steady-state probability that there are 0 jobs at service center @math{k}. @item @var{R}(k) response time on service center @math{k}. @item @var{Q}(k) average number of requests in service center @math{k}. @item @var{X}(k) throughput of service center @math{k}. @end table @strong{NOTES} In presence of load-dependent servers, the MVA algorithm is known to be numerically unstable. Generally this problem manifests itself as negative response times or utilization. @strong{REFERENCES} @itemize @item M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313--322. @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} @end itemize This implementation is described in G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, Section 8.2.4.1, ``Networks with Load-Dependent Service: Closed Networks''. @seealso{qncsmva} @end deftypefn @c @c CMVA for single class, closed networks with a single load dependent servers @c @anchor{doc-qncscmva} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncscmva (@var{N}, @var{S}, @var{Sld}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncscmva (@var{N}, @var{S}, @var{Sld}, @var{V}, @var{Z}) @cindex conditional MVA (CMVA) @cindex Mean Value Analysis, conditional (CMVA) @cindex closed network, single class @cindex CMVA Conditional MVA (CMVA) algorithm, a numerically stable variant of MVA. This function supports a network of @math{M @geq{} 1} service centers and a single delay center. Servers @math{1, @dots{}, M-1} are load-independent; server @math{M} is load-dependent. @strong{INPUTS} @table @code @item @var{N} Number of requests in the system, @code{@var{N} @geq{} 0}. If @code{@var{N} == 0}, this function returns @code{@var{U} = @var{R} = @var{Q} = @var{X} = 0} @item @var{S}(k) mean service time on server @math{k = 1, @dots{}, M-1} (@code{@var{S}(k) > 0}). If there are no fixed-rate servers, then @code{S = []} @item @var{Sld}(n) inverse service rate at server @math{M} (the load-dependent server) when there are @math{n} requests, @math{n=1, @dots{}, N}. @code{@var{Sld}(n) = } @math{1 / \mu(n)}. @item @var{V}(k) average number of visits to service center @math{k=1, @dots{}, M}, where @code{@var{V}(k) @geq{} 0}. @code{@var{V}(1:M-1)} are the visit rates to the fixed rate servers; @code{@var{V}(M)} is the visit rate to the load dependent server. @item @var{Z} External delay for customers (@code{@var{Z} @geq{} 0}). Default is 0. @end table @strong{OUTPUTS} @table @code @item @var{U}(k) center @math{k} utilization (@math{k=1, @dots{}, M}) @item @var{R}(k) response time of center @math{k} (@math{k=1, @dots{}, M}). The system response time @var{Rsys} can be computed as @code{@var{Rsys} = @var{N}/@var{Xsys} - Z} @item @var{Q}(k) average number of requests at center @math{k} (@math{k=1, @dots{}, M}). @item @var{X}(k) center @math{k} throughput (@math{k=1, @dots{}, M}). @end table @strong{REFERENCES} @itemize @item G. Casale. @cite{A note on stable flow-equivalent aggregation in closed networks}. Queueing Syst. Theory Appl., 60:193–-202, December 2008, @uref{http://dx.doi.org/10.1007/s11134-008-9093-6, 10.1007/s11134-008-9093-6} @end itemize @end deftypefn @c @c Approximate MVA for single class, closed networks @c @anchor{doc-qncsmvaap} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}, @var{iter_max}) @cindex Mean Value Analysys (MVA), approximate @cindex MVA, approximate @cindex approximate MVA @cindex closed network, single class @cindex closed network, approximate analysis Analyze closed, single class queueing networks using the Approximate Mean Value Analysis (MVA) algorithm. This function is based on approximating the number of customers seen at center @math{k} when a new request arrives as @math{Q_k(N) \times (N-1)/N}. This function only handles single-server and delay centers; if your network contains general load-dependent service centers, use the function @code{qncsmvald} instead. @strong{INPUTS} @table @code @item @var{N} Population size (number of requests in the system, @code{@var{N} > 0}). @item @var{S}(k) mean service time on server @math{k} (@code{@var{S}(k)>0}). @item @var{V}(k) average number of visits to service center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k} (if @var{m} is a scalar, all centers have that number of servers). If @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); if @code{@var{m}(k) == 1}, center @math{k} is a regular queueing center (FCFS, LCFS-PR or PS) with one server (default). This function does not support multiple server nodes (@code{@var{m}(k) > 1}). @item @var{Z} External delay for customers (@code{@var{Z} @geq{} 0}). Default is 0. @item @var{tol} Stopping tolerance. The algorithm stops when the maximum relative difference between the new and old value of the queue lengths @var{Q} becomes less than the tolerance. Default is @math{10^{-5}}. @item @var{iter_max} Maximum number of iterations (@code{@var{iter_max}>0}. The function aborts if convergenge is not reached within the maximum number of iterations. Default is 100. @end table @strong{OUTPUTS} @table @code @item @var{U}(k) If @math{k} is a FCFS, LCFS-PR or PS node (@code{@var{m}(k) == 1}), then @code{@var{U}(k)} is the utilization of center @math{k}. If @math{k} is an IS node (@code{@var{m}(k) < 1}), then @code{@var{U}(k)} is the @emph{traffic intensity} defined as @code{@var{X}(k)*@var{S}(k)}. @item @var{R}(k) response time at center @math{k}. The system response time @var{Rsys} can be computed as @code{@var{Rsys} = @var{N}/@var{Xsys} - Z} @item @var{Q}(k) average number of requests at center @math{k}. The number of requests in the system can be computed either as @code{sum(@var{Q})}, or using the formula @code{@var{N}-@var{Xsys}*@var{Z}}. @item @var{X}(k) center @math{k} throughput. The system throughput @var{Xsys} can be computed as @code{@var{Xsys} = @var{X}(1) / @var{V}(1)} @end table @strong{REFERENCES} This implementation is based on Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 6.4.2.2 ("Approximate Solution Techniques"). @seealso{qncsmva,qncsmvald} @end deftypefn @c @c Convolution @c According to the BCMP theorem, the state probability of a closed single class queueing network with @math{K} nodes and @math{N} requests can be expressed as: @iftex @tex $$ \pi(n_1, \ldots, n_K) = {1 \over G(N)} \prod_{k=1}^K F_k(n_k) $$ @end tex @end iftex @ifnottex @example @group n = [n1, @dots{} nK]; @r{population vector} p = 1/G(N+1) \prod F(k,k); @end group @end example @end ifnottex Here @math{\pi(n_1, @dots{}, n_K)} is the joint probability of having @math{n_k} requests at node @math{k}, for all @math{k=1, @dots{}, K}; @math{\sum_{k=1}^K n_k = N} The @emph{convolution algorithms} computes the normalization constants @math{{\bf G} = \left[G(0), @dots{}, G(N)\right]} for single-class, closed networks with @math{N} requests. The normalization constants are returned as vector @code{@var{G}=[@var{G}(1), @dots{} @var{G}(N+1)]} where @code{@var{G}(i+1)} is the value of @math{G(i)} (remember that Octave uses 1-base vectors). The normalization constant can be used to compute all performance measures of interest (utilization, average response time and so on). @command{queueing} implements the convolution algorithm, in the function @command{qncsconv} and @command{qncsconvld}. The first one supports single-station nodes, multiple-station nodes and IS nodes. The second one supports networks with general load-dependent service centers. @anchor{doc-qncsconv} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsconv (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsconv (@var{N}, @var{S}, @var{V}, @var{m}) @cindex closed network, single class @cindex normalization constant @cindex convolution algorithm Analyze product-form, single class closed networks with @math{K} service centers using the convolution algorithm. Load-independent service centers, multiple servers (@math{M/M/m} queues) and IS nodes are supported. For general load-dependent service centers, use @code{qncsconvld} instead. @strong{INPUTS} @table @code @item @var{N} Number of requests in the system (@code{@var{N}>0}). @item @var{S}(k) average service time on center @math{k} (@code{@var{S}(k) @geq{} 0}). @item @var{V}(k) visit count of service center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. If @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); if @code{@var{m}(k) @geq{} 1}, center @math{k} it is a regular @math{M/M/m} queueing center with @code{@var{m}(k)} identical servers. Default is @code{@var{m}(k) = 1} for all @math{k}. @end table @strong{OUTPUT} @table @code @item @var{U}(k) center @math{k} utilization. For IS nodes, @code{@var{U}(k)} is the @emph{traffic intensity} @code{@var{X}(k) * @var{S}(k)}. @item @var{R}(k) average response time of center @math{k}. @item @var{Q}(k) average number of customers at center @math{k}. @item @var{X}(k) throughput of center @math{k}. @item @var{G}(n) Vector of normalization constants. @code{@var{G}(n+1)} contains the value of the normalization constant with @math{n} requests @math{G(n)}, @math{n=0, @dots{}, N}. @end table @strong{NOTE} For a network with @math{K} service centers and @math{N} requests, this implementation of the convolution algorithm has time and space complexity @math{O(NK)}. @strong{REFERENCES} @itemize @item Jeffrey P. Buzen, @cite{Computational Algorithms for Closed Queueing Networks with Exponential Servers}, Communications of the ACM, volume 16, number 9, September 1973, pp. 527--531. @uref{http://doi.acm.org/10.1145/362342.362345, 10.1145/362342.362345} @end itemize This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, pp. 313--317. @seealso{qncsconvld} @end deftypefn @noindent @strong{EXAMPLE} The normalization constant @math{G} can be used to compute the steady-state probabilities for a closed single class product-form Queueing Network with @math{K} nodes and @math{N} requests. Let @code{@var{n} = [@math{n_1, @dots{}, n_K}]} be a valid population vector, @math{\sum_{k=1}^K n_k = N}. Then, the steady-state probability @code{@var{p}(k)} to have @code{@var{n}(k)} requests at service center @math{k} can be computed as: @iftex @tex $$ p_k(n_k) = {(V_k S_k)^{n_k} \over G(N)} \left(G(N-n_k) - V_k S_k G(N-n_k-1)\right), \quad k=1, 2, \ldots, K $$ @end tex @end iftex @example @verbatim n = [1 2 0]; N = sum(n); # Total population size S = [ 1/0.8 1/0.6 1/0.4 ]; m = [ 2 3 1 ]; V = [ 1 .667 .2 ]; [U R Q X G] = qncsconv( N, S, V, m ); p = [0 0 0]; # initialize p # Compute the probability to have n(k) jobs at service center k for k=1:3 p(k) = (V(k)*S(k))^n(k) / G(N+1) * ... (G(N-n(k)+1) - V(k)*S(k)*G(N-n(k)) ); printf("Prob( n(%d) = %d )=%f\n", k, n(k), p(k) ); endfor @end verbatim @print{} Prob( n(1) = 1 ) = 0.17975 @print{} Prob( n(2) = 2 ) = 0.48404 @print{} Prob( n(3) = 0 ) = 0.52779 @end example @noindent (recall that @code{@var{G}(@var{N}+1)} represents @math{G(N)}, since in Octave array indices start at one). @c @anchor{doc-qncsconvld} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}, @var{G}] =} qncsconvld (@var{N}, @var{S}, @var{V}) @cindex closed network @cindex normalization constant @cindex convolution algorithm @cindex load-dependent service center Convolution algorithm for product-form, single-class closed queueing networks with @math{K} general load-dependent service centers. This function computes steady-state performance measures for single-class, closed networks with load-dependent service centers using the convolution algorithm; the normalization constants are also computed. The normalization constants are returned as vector @code{@var{G}=[@var{G}(1), @dots{}, @var{G}(N+1)]} where @code{@var{G}(i+1)} is the value of @math{G(i)}. @strong{INPUTS} @table @code @item @var{N} Number of requests in the system (@code{@var{N}>0}). @item @var{S}(k,n) mean service time at center @math{k} where there are @math{n} requests, @math{1 @leq{} n @leq{} N}. @code{@var{S}(k,n)} @math{= 1 / \mu_{k,n}}, where @math{\mu_{k,n}} is the service rate of center @math{k} when there are @math{n} requests. @item @var{V}(k) visit count of service center @math{k} (@code{@var{V}(k) @geq{} 0}). The length of @var{V} is the number of servers @math{K} in the network. @end table @strong{OUTPUT} @table @code @item @var{U}(k) center @math{k} utilization. @item @var{R}(k) average response time at center @math{k}. @item @var{Q}(k) average number of requests in center @math{k}. @item @var{X}(k) center @math{k} throughput. @item @var{G}(n) Normalization constants (vector). @code{@var{G}(n+1)} corresponds to @math{G(n)}, as array indexes in Octave start from 1. @end table @strong{REFERENCES} @itemize @item Herb Schwetman, @cite{Some Computational Aspects of Queueing Network Models}, Technical Report @uref{http://docs.lib.purdue.edu/cstech/285/, CSD-TR-354}, Department of Computer Sciences, Purdue University, February 1981 (revised). @item M. Reiser, H. Kobayashi, @cite{On The Convolution Algorithm for Separable Queueing Networks}, In Proceedings of the 1976 ACM SIGMETRICS Conference on Computer Performance Modeling Measurement and Evaluation (Cambridge, Massachusetts, United States, March 29--31, 1976). SIGMETRICS '76. ACM, New York, NY, pp. 109--117. @uref{http://doi.acm.org/10.1145/800200.806187, 10.1145/800200.806187} @end itemize This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998, pp. 313--317. Function @command{qncsconvld} is slightly different from the version described in Bolch et al. because it supports general load-dependent centers (while the version in the book does not). The modification is in the definition of function @code{F()} in @command{qncsconvld} which has been made similar to function @math{f_i} defined in Schwetman, @cite{Some Computational Aspects of Queueing Network Models}. @seealso{qncsconv} @end deftypefn @c @c @c @subsection Non Product-Form QNs @anchor{Non Product-Form QNs} @c @c MVABLO algorithm for approximate analysis of closed, single class @c QN with blocking @c @anchor{doc-qncsmvablo} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncsmvablo (@var{N}, @var{S}, @var{M}, @var{P} ) @cindex queueing network with blocking @cindex blocking queueing network @cindex closed network, finite capacity @cindex MVABLO Approximate MVA algorithm for closed queueing networks with blocking. @strong{INPUTS} @table @code @item @var{N} number of requests in the system. @var{N} must be strictly greater than zero, and less than the overall network capacity: @code{0 < @var{N} < sum(@var{M})}. @item @var{S}(k) average service time on server @math{k} (@code{@var{S}(k) > 0}). @item @var{M}(k) capacity of center @math{k}. The capacity is the maximum number of requests in a service center, including the request in service (@code{@var{M}(k) @geq{} 1}). @item @var{P}(i,j) probability that a request which completes service at server @math{i} will be transferred to server @math{j}. @end table @strong{OUTPUTS} @table @code @item @var{U}(k) center @math{k} utilization. @item @var{R}(k) average response time of service center @math{k}. @item @var{Q}(k) average number of requests in service center @math{k} (including the request in service). @item @var{X}(k) center @math{k} throughput. @end table @strong{REFERENCES} @itemize @item Ian F. Akyildiz, @cite{Mean Value Analysis for Blocking Queueing Networks}, IEEE Transactions on Software Engineering, vol. 14, n. 2, april 1988, pp. 418--428. @uref{http://dx.doi.org/10.1109/32.4663, 10.1109/32.4663} @end itemize @seealso{qnopen, qnclosed} @end deftypefn @c @anchor{doc-qnmarkov} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{lambda}, @var{S}, @var{C}, @var{P}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{lambda}, @var{S}, @var{C}, @var{P}, @var{m}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{N}, @var{S}, @var{C}, @var{P}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmarkov (@var{N}, @var{S}, @var{C}, @var{P}, @var{m}) @cindex closed network, multiple classes @cindex closed network, finite capacity @cindex blocking queueing network @cindex RS blocking Compute utilization, response time, average queue length and throughput for open or closed queueing networks with finite capacity. Blocking type is Repetitive-Service (RS). This function explicitly generates and solve the underlying Markov chain, and thus might require a large amount of memory. More specifically, networks which can me analyzed by this function have the following properties: @itemize @bullet @item There exists only a single class of customers. @item The network has @math{K} service centers. Center @math{k} has @math{m_k > 0} servers, and has a total (finite) capacity of @math{C_k \geq m_k} which includes both buffer space and servers. The buffer space at service center @math{k} is therefore @math{C_k - m_k}. @item The network can be open, with external arrival rate to center @math{k} equal to @math{\lambda_k}, or closed with fixed population size @math{N}. For closed networks, the population size @math{N} must be strictly less than the network capacity: @math{N < \sum_i C_i}. @item Average service times are load-independent. @item @math{P_{i, j}} is the probability that requests completing execution at center @math{i} are transferred to center @math{j}, @math{i \neq j}. For open networks, a request may leave the system from any node @math{i} with probability @math{1-\sum_j P_{i, j}}. @item Blocking type is Repetitive-Service (RS). Service center @math{j} is @emph{saturated} if the number of requests is equal to its capacity @math{C_j}. Under the RS blocking discipline, a request completing service at center @math{i} which is being transferred to a saturated server @math{j} is put back at the end of the queue of @math{i} and will receive service again. Center @math{i} then processes the next request in queue. External arrivals to a saturated servers are dropped. @end itemize @strong{INPUTS} @table @code @item @var{lambda}(k) @itemx @var{N} If the first argument is a vector @var{lambda}, it is considered to be the external arrival rate @code{@var{lambda}(k) @geq{} 0} to service center @math{k} of an open network. If the first argument is a scalar, it is considered as the population size @var{N} of a closed network; in this case @var{N} must be strictly less than the network capacity: @code{@var{N} < sum(@var{C})}. @item @var{S}(k) average service time at service center @math{k} @item @var{C}(k) capacity of service center @math{k}. The capacity includes both the buffer and server space @code{@var{m}(k)}. Thus the buffer space is @code{@var{C}(k)-@var{m}(k)}. @item @var{P}(i,j) transition probability from service center @math{i} to service center @math{j}. @item @var{m}(k) number of servers at service center @math{k}. Note that @code{@var{m}(k) @geq{} @var{C}(k)} for each @var{k}. If @var{m} is omitted, all service centers are assumed to have a single server (@code{@var{m}(k) = 1} for all @math{k}). @end table @strong{OUTPUTS} @table @code @item @var{U}(k) center @math{k} utilization. @item @var{R}(k) response time on service center @math{k}. @item @var{Q}(k) average number of customers in the service center @math{k}, @emph{including} the request in service. @item @var{X}(k) throughput of service center @math{k}. @end table @strong{NOTES} The space complexity of this implementation is @math{O(\prod_{k=1}^K (C_k + 1)^2)}. The time complexity is dominated by the time needed to solve a linear system with @math{\prod_{k=1}^K (C_k + 1)} unknowns. @end deftypefn @c @c @c @node Multiple Class Models @section Multiple Class Models In multiple class queueing models, we assume that there exist @math{C} different classes of requests. Each request from class @math{c} spends on average time @math{S_{c, k}} in service at center @math{k}. For open models, we denote with @math{{\bf \lambda} = \lambda_{c, k}} the arrival rates, where @math{\lambda_{c, k}} is the external arrival rate of class @math{c} requests at center @math{k}. For closed models, we denote with @math{{\bf N} = \left[N_1, @dots{}, N_C\right]} the population vector, where @math{N_c} is the number of class @math{c} requests in the system. The transition probability matrix for multiple class networks is a @math{C \times K \times C \times K} matrix @math{{\bf P} = [P_{r, i, s, j}]} where @math{P_{r, i, s, j}} is the probability that a class @math{r} request which completes service at center @math{i} will join server @math{j} as a class @math{s} request. Model input and outputs can be adjusted by adding additional indexes for the customer classes. @noindent @strong{Model Inputs} @table @asis @item @math{@lambdack} (open networks) External arrival rate of class-@math{c} requests to service center @math{k} @item @math{@lambda} (open networks) Overall external arrival rate to the whole system: @math{\lambda = \sum_c \sum_k \lambda_{c, k}} @item @math{N_c} (closed networks) Number of class @math{c} requests in the system. @item @math{S_{c, k}} Average service time. @math{S_{c, k}} is the average service time on service center @math{k} for class @math{c} requests. @item @math{P_{r, i, s, j}} Routing probability matrix. @math{{\bf P} = [P_{r, i, s, j}]} is a @math{C \times K \times C \times K} matrix such that @math{P_{r, i, s, j}} is the probability that a class @math{r} request which completes service at server @math{i} will move to server @math{j} as a class @math{s} request. @item @math{V_{c, k}} Mean number of visits of class @math{c} requests to center @math{k}. @end table @noindent @strong{Model Outputs} @table @asis @item @math{U_{c, k}} Utilization of service center @math{k} by class @math{c} requests. The utilization is defined as the fraction of time in which the resource is busy (i.e., the server is processing requests). If center @math{k} is a single-server or multiserver node, then @math{0 @leq{} U_{c, k} @leq{} 1}. If center @math{k} is an infinite server node (delay center), then @math{U_{c, k}} denotes the @emph{traffic intensity} and is defined as @math{U_{c, k} = X_{c, k} S_{c, k}}; in this case the utilization may be greater than one. @item @math{R_{c, k}} Average response time experienced by class @math{c} requests on service center @math{k}. The average response time is defined as the average time between the arrival of a customer in the queue, and the completion of service. @item @math{Q_{c, k}} Average number of class @math{c} requests on service center @math{k}. This includes both the requests in the queue, and the request being served. @item @math{X_{c, k}} Throughput of service center @math{k} for class @math{c} requests. The throughput is defined as the rate of completion of class @math{c} requests. @end table @noindent It is possible to define aggregate performance measures as follows: @table @math @item U_k Utilization of service center @math{k}: @iftex @tex $U_k = \sum_{c=1}^C U_{c, k}$ @end tex @end iftex @ifnottex @code{Uk = sum(U,k);} @end ifnottex @item R_c System response time for class @math{c} requests: @iftex @tex $R_c = \sum_{k=1}^K R_{c, k} V_{c, k}$ @end tex @end iftex @ifnottex @code{Rc = sum( V.*R, 1 );} @end ifnottex @item Q_c Average number of class @math{c} requests in the system: @iftex @tex $Q_c = \sum_{k=1}^K Q_{c, k}$ @end tex @end iftex @ifnottex @code{Qc = sum( Q, 2 );} @end ifnottex @item X_c Class @math{c} throughput: @iftex @tex $X_c = X_{c, k} / V_{c, k}$ for any @math{k} for which @math{V_{c,k} \neq 0} @end tex @end iftex @ifnottex @code{X(c) = X(c,k) ./ V(c,k);} for any @math{k} for which @code{V(c,k) != 0} @end ifnottex @end table For closed networks, we can define the visit ratios @math{V_{s, j}} for class @math{s} customers at service center @math{j} as follows: @iftex @tex $$\left\{\eqalign{ V_{s, j} & = \sum_{r=1}^C \sum_{i=1}^K V_{r, i} P_{r, i, s, j}, \quad s=1, \ldots, C, j=1, \ldots, K \cr V_{s, r_s} & = 1 \quad s=1, \ldots, C}\right. $$ @end tex @end iftex @ifnottex @group V_sj = sum_r sum_i V_ri P_risj s=1,...,C, j=1,...,K V_s r_s = 1 s=1,...,C @end group @end ifnottex @noindent where @math{r_s} is the class @math{s} reference station. Similarly to single class models, the traffic equation for closed multiclass networks can be solved up to multiplicative constants unless we choose one reference station for each closed chain class and set its visit ratio to 1. For open networks the traffic equations are as follows: @iftex @tex $$V_{s, j} = P_{0, s, j} + \sum_{r=1}^C \sum_{i=1}^K V_{r, i} P_{r, i, s, j} \quad s=1, \ldots, C, j=1, \ldots, K$$ @end tex @end iftex @ifnottex @group V_sj = P_0sj + sum_r sum_i V_ri P_risj s=1,...,C, j=1,...,K @end group @end ifnottex @noindent where @math{P_{0, s, j}} is the probability that an external arrival goes to service center @math{j} as a class-@math{s} request. If @math{\lambda_{s, j}} is the external arrival rate of class @math{s} requests to service center @math{j}, and @math{\lambda = \sum_s \sum_j \lambda_{s, j}} is the overall external arrival rate, then @math{P_{0, s, j} = \lambda_{s, j} / \lambda}. @anchor{doc-qncmvisits} @deftypefn {Function File} {[@var{V} @var{ch}] =} qncmvisits (@var{P}) @deftypefnx {Function File} {[@var{V} @var{ch}] =} qncmvisits (@var{P}, @var{r}) Compute the average number of visits to the service centers of a closed multiclass network with @math{K} service centers and @math{C} customer classes. @strong{INPUTS} @table @code @item @var{P}(r,i,s,j) probability that a class @math{r} request which completed service at center @math{i} is routed to center @math{j} as a class @math{s} request. Class switching is allowed. @item @var{r}(c) index of class @math{c} reference station, @math{r(c) \in @{1, @dots{}, K@}}, @math{1 @leq{} c @leq{} C}. The class @math{c} visit count to server @code{@var{r}(c)} (@code{@var{V}(c,r(c))}) is conventionally set to 1. The reference station serves two purposes: (i) its throughput is assumed to be the system throughput, and (ii) a job returning to the reference station is assumed to have completed one cycle. Default is to consider station 1 as the reference station for all classes. @end table @strong{OUTPUTS} @table @code @item @var{V}(c,i) number of visits of class @math{c} requests at center @math{i}. @item @var{ch}(c) chain number that class @math{c} belongs to. Different classes can belong to the same chain. Chains are numbered sequentially starting from 1 (@math{1, 2, @dots{}}). The total number of chains is @code{max(@var{ch})}. @end table @end deftypefn @anchor{doc-qnomvisits} @deftypefn {Function File} {@var{V} =} qnomvisits (@var{P}, @var{lambda}) Compute the visit ratios to the service centers of an open multiclass network with @math{K} service centers and @math{C} customer classes. @strong{INPUTS} @table @code @item @var{P}(r,i,s,j) probability that a class @math{r} request which completed service at center @math{i} is routed to center @math{j} as a class @math{s} request. Class switching is supported. @item @var{lambda}(r,i) external arrival rate of class @math{r} requests to center @math{i}. @end table @strong{OUTPUTS} @table @code @item @var{V}(r,i) visit ratio of class @math{r} requests at center @math{i}. @end table @end deftypefn @c @c Open Networks @c @subsection Open Networks @c @c Open network with multiple classes @c @anchor{doc-qnom} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{P}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnom (@var{lambda}, @var{S}, @var{P}, @var{m}) @cindex open network, multiple classes @cindex multiclass network, open Exact analysis of open, multiple-class BCMP networks. The network can be made of @emph{single-server} queueing centers (FCFS, LCFS-PR or PS) or delay centers (IS). This function assumes a network with @math{K} service centers and @math{C} customer classes. @strong{INPUTS} @table @code @item @var{lambda}(c) If this function is invoked as @code{qnom(lambda, S, V, @dots{})}, then @code{@var{lambda}(c)} is the external arrival rate of class @math{c} customers (@code{@var{lambda}(c) @geq{} 0}). If this function is invoked as @code{qnom(lambda, S, P, @dots{})}, then @code{@var{lambda}(c,k)} is the external arrival rate of class @math{c} customers at center @math{k} (@code{@var{lambda}(c,k) @geq{} 0}). @item @var{S}(c,k) mean service time of class @math{c} customers on the service center @math{k} (@code{@var{S}(c,k)>0}). For FCFS nodes, mean service times must be class-independent. @item @var{V}(c,k) visit ratio of class @math{c} customers to service center @math{k} (@code{@var{V}(c,k) @geq{} 0 }). @strong{If you pass this argument, class switching is not allowed} @item @var{P}(r,i,s,j) probability that a class @math{r} job completing service at center @math{i} is routed to center @math{j} as a class @math{s} job. @strong{If you pass argument @var{P}, class switching is allowed}; however, all servers must be fixed-rate or infinite-server nodes (@code{@var{m}(k) @leq{} 1} for all @math{k}). @item @var{m}(k) number of servers at center @math{k}. If @code{@var{m}(k) < 1}, enter @math{k} is a delay center (IS); otherwise it is a regular queueing center with @code{@var{m}(k)} servers. Default is @code{@var{m}(k) = 1} for all @math{k}. @end table @strong{OUTPUTS} @table @code @item @var{U}(c,k) If @math{k} is a queueing center, then @code{@var{U}(c,k)} is the class @math{c} utilization of center @math{k}. If @math{k} is an IS node, then @code{@var{U}(c,k)} is the class @math{c} @emph{traffic intensity} defined as @code{@var{X}(c,k)*@var{S}(c,k)}. @item @var{R}(c,k) class @math{c} response time at center @math{k}. The system response time for class @math{c} requests can be computed as @code{dot(@var{R}, @var{V}, 2)}. @item @var{Q}(c,k) average number of class @math{c} requests at center @math{k}. The average number of class @math{c} requests in the system @var{Qc} can be computed as @code{Qc = sum(@var{Q}, 2)} @item @var{X}(c,k) class @math{c} throughput at center @math{k}. @end table @strong{NOTES} If the function call specifies the visit ratios @var{V}, class switching is @strong{not} allowed. If the function call specifies the routing probability matrix @var{P}, then class switching @strong{is} allowed; however, all nodes are restricted to be fixed rate servers or delay centers: multiple-server and general load-dependent centers are not supported. Note that the meaning of parameter @var{lambda} is different from one case to the other (see below). @strong{REFERENCES} @itemize @item Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 7.4.1 ("Open Model Solution Techniques"). @end itemize @seealso{qnopen,qnos,qnomvisits} @end deftypefn @c @c Closed Networks @c @subsection Closed Networks @c @anchor{doc-qncmpopmix} @deftypefn {Function File} {pop_mix =} qncmpopmix (@var{k}, @var{N}) @cindex population mix @cindex closed network, multiple classes Return the set of population mixes for a closed multiclass queueing network with exactly @var{k} customers. Specifically, given a closed multiclass QN with @math{C} customer classes, where there are @code{@var{N}(c)} class @math{c} requests, a @math{k}-mix @var{mix} is a @math{C}-dimensional vector with the following properties: @example @group all( mix >= 0 ); all( mix <= N ); sum( mix ) == k; @end group @end example @var{pop_mix} is a matrix with @math{C} columns, such that each row represents a valid mix. @strong{INPUTS} @table @code @item @var{k} Size of the requested mix (scalar, @code{@var{k} @geq{} 0}). @item @var{N}(c) number of class @math{c} requests (@code{@var{k} @leq{} sum(@var{N})}). @end table @strong{OUTPUTS} @table @code @item @var{pop_mix}(i,c) number of class @math{c} requests in the @math{i}-th population mix. The number of mixes is @code{rows(@var{pop_mix})}. @end table If you are interested in the number of @math{k}-mixes only, you can use the funcion @code{qnmvapop}. @strong{REFERENCES} @itemize @item Herb Schwetman, @cite{Implementing the Mean Value Algorithm for the Solution of Queueing Network Models}, Technical Report @uref{http://docs.lib.purdue.edu/cstech/286/, 80-355}, Department of Computer Sciences, Purdue University, revised February 15, 1982. @end itemize The slightly different problem of enumerating all tuples @math{k_1, @dots{}, k_N} such that @math{\sum_i k_i = k} and @math{k_i @geq{} 0}, for a given @math{k @geq{} 0} has been described in S. Santini, @cite{Computing the Indices for a Complex Summation}, unpublished report, available at @url{http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf} @seealso{qncmnpop} @end deftypefn @c @anchor{doc-qncmnpop} @deftypefn {Function File} {@var{H} =} qncmnpop (@var{N}) @cindex population mix @cindex closed network, multiple classes Given a network with @math{C} customer classes, this function computes the number of @math{k}-mixes @code{@var{H}(r,k)} that can be constructed by the multiclass MVA algorithm by allocating @math{k} customers to the first @math{r} classes. @strong{INPUTS} @table @code @item @var{N}(c) number of class-@math{c} requests in the system. The total number of requests in the network is @code{sum(@var{N})}. @end table @strong{OUTPUTS} @table @code @item @var{H}(r,k) is the number of @math{k} mixes that can be constructed allocating @math{k} customers to the first @math{r} classes. @end table @strong{REFERENCES} @itemize @item Zahorjan, J. and Wong, E. @cite{The solution of separable queueing network models using mean value analysis}. SIGMETRICS Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI @uref{http://doi.acm.org/10.1145/1010629.805477, 10.1145/1010629.805477} @end itemize @seealso{qncmmva,qncmpopmix} @end deftypefn @c @c MVA for multiple class, closed networks @c @anchor{doc-qncmmva} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S} ) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{P}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{P}, @var{r}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmva (@var{N}, @var{S}, @var{P}, @var{r}, @var{m}) @cindex Mean Value Analysys (MVA) @cindex closed network, multiple classes @cindex multiclass network, closed Compute steady-state performance measures for closed, multiclass queueing networks using the Mean Value Analysys (MVA) algorithm. Queueing policies at service centers can be any of the following: @table @strong @item FCFS (First-Come-First-Served) customers are served in order of arrival; multiple servers are allowed. For this kind of queueing discipline, average service times must be class-independent. @item PS (Processor Sharing) customers are served in parallel by a single server, each customer receiving an equal share of the service rate. @item LCFS-PR (Last-Come-First-Served, Preemptive Resume) customers are served in reverse order of arrival by a single server and the last arrival preempts the customer in service who will later resume service at the point of interruption. @item IS (Infinite Server) customers are delayed independently of other customers at the service center (there is effectively an infinite number of servers). @end table @strong{INPUTS} @table @code @item @var{N}(c) number of class @math{c} requests; @code{@var{N}(c) @geq{} 0}. If class @math{c} has no requests (@code{@var{N}(c) == 0}), then for all @var{k}, this function returns @code{@var{U}(c,k) = @var{R}(c,k) = @var{Q}(c,k) = @var{X}(c,k) = 0} @item @var{S}(c,k) mean service time for class @math{c} requests at center @math{k} (@code{@var{S}(c,k) @geq{} 0}). If the service time at center @math{k} is class-dependent, then center @math{k} is assumed to be of type @math{-/G/1}--PS (Processor Sharing). If center @math{k} is a FCFS node (@code{@var{m}(k)>1}), then the service times @strong{must} be class-independent, i.e., all classes @strong{must} have the same service time. @item @var{V}(c,k) average number of visits of class @math{c} requests at center @math{k}; @code{@var{V}(c,k) @geq{} 0}, default is 1. @strong{If you pass this argument, class switching is not allowed} @item @var{P}(r,i,s,j) probability that a class @math{r} request completing service at center @math{i} is routed to center @math{j} as a class @math{s} request; the reference stations for each class are specified with the paramter @var{r}. @strong{If you pass argument @var{P}, class switching is allowed}; however, you can not specify any external delay (i.e., @var{Z} must be zero) and all servers must be fixed-rate or infinite-server nodes (@code{@var{m}(k) @leq{} 1} for all @math{k}). @item @var{r}(c) reference station for class @math{c}. If omitted, station 1 is the reference station for all classes. See @command{qncmvisits}. @item @var{m}(k) If @code{@var{m}(k)<1}, then center @math{k} is assumed to be a delay center (IS node @math{-/G/\infty}). If @code{@var{m}(k)==1}, then service center @math{k} is a regular queueing center (@math{M/M/1}--FCFS, @math{-/G/1}--LCFS-PR or @math{-/G/1}--PS). Finally, if @code{@var{m}(k)>1}, center @math{k} is a @math{M/M/m}--FCFS center with @code{@var{m}(k)} identical servers. Default is @code{@var{m}(k)=1} for each @math{k}. @item @var{Z}(c) class @math{c} external delay (think time); @code{@var{Z}(c) @geq{} 0}. Default is 0. This parameter can not be used if you pass a routing matrix as the second parameter of @code{qncmmva}. @end table @strong{OUTPUTS} @table @code @item @var{U}(c,k) If @math{k} is a FCFS, LCFS-PR or PS node (@code{@var{m}(k) @geq{} 1}), then @code{@var{U}(c,k)} is the class @math{c} utilization at center @math{k}, @math{0 @leq{} U(c,k) @leq{} 1}. If @math{k} is an IS node, then @code{@var{U}(c,k)} is the class @math{c} @emph{traffic intensity} at center @math{k}, defined as @code{@var{U}(c,k) = @var{X}(c,k)*@var{S}(c,k)}. In this case the value of @code{@var{U}(c,k)} may be greater than one. @item @var{R}(c,k) class @math{c} response time at center @math{k}. The class @math{c} @emph{residence time} at center @math{k} is @code{@var{R}(c,k) * @var{C}(c,k)}. The total class @math{c} system response time is @code{dot(@var{R}, @var{V}, 2)}. @item @var{Q}(c,k) average number of class @math{c} requests at center @math{k}. The total number of requests at center @math{k} is @code{sum(@var{Q}(:,k))}. The total number of class @math{c} requests in the system is @code{sum(@var{Q}(c,:))}. @item @var{X}(c,k) class @math{c} throughput at center @math{k}. The class @math{c} throughput can be computed as @code{@var{X}(c,1) / @var{V}(c,1)}. @end table @strong{NOTES} If the function call specifies the visit ratios @var{V}, then class switching is @strong{not} allowed. If the function call specifies the routing probability matrix @var{P}, then class switching @strong{is} allowed; however, in this case all nodes are restricted to be fixed rate servers or delay centers: multiple-server and general load-dependent centers are not supported. In presence of load-dependent servers (e.g., if @code{@var{m}(i)>1} for some @math{i}), the MVA algorithm is known to be numerically unstable. Generally this problem shows up as negative values for the computed response times or utilizations. This is not a problem with the @code{queueing} package, but with the MVA algorithm; as such, there is no known workaround at the moment (aoart from using a different solution technique, if available). This function prints a warning if it detects numerical problems; you can disable the warning with the command @code{warning("off", "qn:numerical-instability")}. Given a network with @math{K} service centers, @math{C} job classes and population vector @math{{\bf N}=\left[N_1, @dots{}, N_C\right]}, the MVA algorithm requires space @math{O(C \prod_i (N_i + 1))}. The time complexity is @math{O(CK\prod_i (N_i + 1))}. This implementation is slightly more space-efficient (see details in the code). While the space requirement can be mitigated by using some optimizations, the time complexity can not. If you need to analyze large closed networks you should consider the @command{qncmmvaap} function, which implements the approximate MVA algorithm. Note however that @command{qncmmvaap} will only provide approximate results. @strong{REFERENCES} @itemize @item M. Reiser and S. S. Lavenberg, @cite{Mean-Value Analysis of Closed Multichain Queuing Networks}, Journal of the ACM, vol. 27, n. 2, April 1980, pp. 313--322. @uref{http://doi.acm.org/10.1145/322186.322195, 10.1145/322186.322195} @end itemize This implementation is based on G. Bolch, S. Greiner, H. de Meer and K. Trivedi, @cite{Queueing Networks and Markov Chains: Modeling and Performance Evaluation with Computer Science Applications}, Wiley, 1998 and Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 7.4.2.1 ("Exact Solution Techniques"). @seealso{qnclosed, qncmmvaapprox, qncmvisits} @end deftypefn @c @c Approximate MVA, with Bard-Schweitzer approximation @c @anchor{doc-qncmmvaap} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qncmmvaap (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}, @var{tol}, @var{iter_max}) @cindex Mean Value Analysys (MVA), approximate @cindex MVA, approximate @cindex closed network, multiple classes @cindex multiclass network, closed Approximate Mean Value Analysis (MVA) for closed, multiclass queueing networks with @math{K} service centers and @math{C} customer classes. This implementation uses Bard and Schweitzer approximation. It is based on the assumption that @tex $$Q_i({\bf N}-{\bf 1}_c) \approx {n-1 \over n} Q_i({\bf N})$$ @end tex @ifnottex the queue length at service center @math{k} with population set @math{{\bf N}-{\bf 1}_c} is approximately equal to the queue length with population set @math{\bf N}, times @math{(n-1)/n}: @example @group Q_i(N-1c) ~ (n-1)/n Q_i(N) @end group @end example @end ifnottex where @math{\bf N} is a valid population mix, @math{{\bf N}-{\bf 1}_c} is the population mix @math{\bf N} with one class @math{c} customer removed, and @math{n = \sum_c N_c} is the total number of requests. This implementation works for networks with infinite server (IS) and single-server nodes only. @strong{INPUTS} @table @code @item @var{N}(c) number of class @math{c} requests in the system (@code{@var{N}(c) @geq{} 0}). @item @var{S}(c,k) mean service time for class @math{c} customers at center @math{k} (@code{@var{S}(c,k) @geq{} 0}). @item @var{V}(c,k) average number of visits of class @math{c} requests to center @math{k} (@code{@var{V}(c,k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. If @code{@var{m}(k) < 1}, then the service center @math{k} is assumed to be a delay center (IS). If @code{@var{m}(k) == 1}, service center @math{k} is a regular queueing center (FCFS, LCFS-PR or PS) with a single server node. If omitted, each service center has a single server. Note that multiple server nodes are not supported. @item @var{Z}(c) class @math{c} external delay (@code{@var{Z} @geq{} 0}). Default is 0. @item @var{tol} Stopping tolerance (@code{@var{tol}>0}). The algorithm stops if the queue length computed on two subsequent iterations are less than @var{tol}. Default is @math{10^{-5}}. @item @var{iter_max} Maximum number of iterations (@code{@var{iter_max}>0}. The function aborts if convergenge is not reached within the maximum number of iterations. Default is 100. @end table @strong{OUTPUTS} @table @code @item @var{U}(c,k) If @math{k} is a FCFS, LCFS-PR or PS node, then @code{@var{U}(c,k)} is the utilization of class @math{c} requests on service center @math{k}. If @math{k} is an IS node, then @code{@var{U}(c,k)} is the class @math{c} @emph{traffic intensity} at device @math{k}, defined as @code{@var{U}(c,k) = @var{X}(c)*@var{S}(c,k)} @item @var{R}(c,k) response time of class @math{c} requests at service center @math{k}. @item @var{Q}(c,k) average number of class @math{c} requests at service center @math{k}. @item @var{X}(c,k) class @math{c} throughput at service center @math{k}. @end table @strong{REFERENCES} @itemize @item Y. Bard, @cite{Some Extensions to Multiclass Queueing Network Analysis}, proc. 4th Int. Symp. on Modelling and Performance Evaluation of Computer Systems, Feb 1979, pp. 51--62. @item P. Schweitzer, @cite{Approximate Analysis of Multiclass Closed Networks of Queues}, Proc. Int. Conf. on Stochastic Control and Optimization, jun 1979, pp. 25--29. @end itemize This implementation is based on Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 7.4.2.2 ("Approximate Solution Techniques"). This implementation is slightly different from the one described above, as it computes the average response times @math{R} instead of the residence times. @seealso{qncmmva} @end deftypefn @c @c Mixed networks @c @subsection Mixed Networks @c @c MVA for mixed networks @c @anchor{doc-qnmix} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnmix (@var{lambda}, @var{N}, @var{S}, @var{V}, @var{m}) @cindex Mean Value Analysys (MVA) @cindex mixed network Mean Value Analysis for mixed queueing networks. The network consists of @math{K} service centers (single-server or delay centers) and @math{C} independent customer chains. Both open and closed chains are possible. @var{lambda} is the vector of per-chain arrival rates (open classes); @var{N} is the vector of populations for closed chains. Class switching is @strong{not} allowed. Each customer class @emph{must} correspond to an independent chain. If the network is made of open or closed classes only, then this function calls @code{qnom} or @code{qncmmva} respectively, and prints a warning message. @strong{INPUTS} @table @code @item @var{lambda}(c) @itemx @var{N}(c) For each customer chain @math{c}: @itemize @item if @math{c} is a closed chain, then @code{@var{N}(c)>0} is the number of class @math{c} requests and @code{@var{lambda}(c)} must be zero; @item If @math{c} is an open chain, @code{@var{lambda}(c)>0} is the arrival rate of class @math{c} requests and @code{@var{N}(c)} must be zero; @end itemize @noindent In other words, for each class @math{c} the following must hold: @example (@var{lambda}(c)>0 && @var{N}(c)==0) || (@var{lambda}(c)==0 && @var{N}(c)>0) @end example @item @var{S}(c,k) mean class @math{c} service time at center @math{k}, @code{@var{S}(c,k) @geq{} 0}. For FCFS nodes, service times must be class-independent. @item @var{V}(c,k) average number of visits of class @math{c} customers to center @math{k} (@code{@var{V}(c,k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. Only single-server (@code{@var{m}(k)==1}) or IS (Infinite Server) nodes (@code{@var{m}(k)<1}) are supported. If omitted, each center is assumed to be of type @math{M/M/1}-FCFS. Queueing discipline for single-server nodes can be FCFS, PS or LCFS-PR. @end table @strong{OUTPUTS} @table @code @item @var{U}(c,k) class @math{c} utilization at center @math{k}. @item @var{R}(c,k) class @math{c} response time at center @math{k}. @item @var{Q}(c,k) average number of class @math{c} requests at center @math{k}. @item @var{X}(c,k) class @math{c} throughput at center @math{k}. @end table @strong{REFERENCES} @itemize @item Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 7.4.3 ("Mixed Model Solution Techniques"). Note that in this function we compute the mean response time @math{R} instead of the mean residence time as in the reference. @item Herb Schwetman, @cite{Implementing the Mean Value Algorithm for the Solution of Queueing Network Models}, Technical Report @uref{http://docs.lib.purdue.edu/cstech/286/, CSD-TR-355}, Department of Computer Sciences, Purdue University, revised Feb 15, 1982. @end itemize @seealso{qncmmva, qncm} @end deftypefn @c @c @c @node Generic Algorithms @section Generic Algorithms The @code{queueing} package provides a high-level function @command{qnsolve} for analyzing QN models. @command{qnsolve} takes as input a high-level description of the queueing model, and delegates the actual solution of the model to one of the lower-level function. @command{qnsolve} supports single or multiclass models, but at the moment only product-form networks can be analyzed. For non product-form networks @xref{Non Product-Form QNs}. @command{qnsolve} accepts two input parameters. The first one is the list of nodes, encoded as an Octave @emph{cell array}. The second parameter is the vector of visit ratios @var{V}, which can be either a vector (for single-class models) or a two-dimensional matrix (for multiple-class models). Individual nodes in the network are structures build using the @command{qnmknode} function. @anchor{doc-qnmknode} @deftypefn {Function File} {@var{Q} =} qnmknode (@var{"m/m/m-fcfs"}, @var{S}) @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"m/m/m-fcfs"}, @var{S}, @var{m}) @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"m/m/1-lcfs-pr"}, @var{S}) @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/1-ps"}, @var{S}) @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/1-ps"}, @var{S}, @var{s2}) @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/inf"}, @var{S}) @deftypefnx {Function File} {@var{Q} =} qnmknode (@var{"-/g/inf"}, @var{S}, @var{s2}) Creates a node; this function can be used together with @code{qnsolve}. It is possible to create either single-class nodes (where there is only one customer class), or multiple-class nodes (where the service time is given per-class). Furthermore, it is possible to specify load-dependent service times. String literals are case-insensitive, so for example @var{"-/g/inf"}, @var{"-/G/inf"} and @var{"-/g/INF"} are all equivalent. @strong{INPUTS} @table @code @item @var{S} Mean service time. @itemize @item If @math{S} is a scalar, it is assumed to be a load-independent, class-independent service time. @item If @math{S} is a column vector, then @code{@var{S}(c)} is assumed to the the load-independent service time for class @math{c} customers. @item If @math{S} is a row vector, then @code{@var{S}(n)} is assumed to be the class-independent service time at the node, when there are @math{n} requests. @item Finally, if @var{S} is a two-dimensional matrix, then @code{@var{S}(c,n)} is assumed to be the class @math{c} service time when there are @math{n} requests at the node. @end itemize @item @var{m} Number of identical servers at the node. Default is @code{@var{m}=1}. @item @var{s2} Squared coefficient of variation for the service time. Default is 1.0. @end table The returned struct @var{Q} should be considered opaque to the client. @c The returned struct @var{Q} has the following fields: @c @table @var @c @item Q.node @c (String) type of the node; valid values are @code{"m/m/m-fcfs"}, @c @code{"-/g/1-lcfs-pr"}, @code{"-/g/1-ps"} (Processor-Sharing) @c and @code{"-/g/inf"} (Infinite Server, or delay center). @c @item Q.S @c Average service time. If @code{@var{Q}.S} is a vector, then @c @code{@var{Q}.S(i)} is the average service time at that node @c if there are @math{i} requests. @c @item Q.m @c Number of identical servers at a @code{"m/m/m-fcfs"}. Default is 1. @c @item Q.c @c Number of customer classes. Default is 1. @c @end table @seealso{qnsolve} @end deftypefn After the network has been defined, it is possible to solve it using @command{qnsolve}. @anchor{doc-qnsolve} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"closed"}, @var{N}, @var{QQ}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"closed"}, @var{N}, @var{QQ}, @var{V}, @var{Z}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"open"}, @var{lambda}, @var{QQ}, @var{V}) @deftypefnx {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnsolve (@var{"mixed"}, @var{lambda}, @var{N}, @var{QQ}, @var{V}) High-level function for analyzing QN models. @itemize @item For @strong{closed} networks, the following server types are supported: @math{M/M/m}--FCFS, @math{-/G/\infty}, @math{-/G/1}--LCFS-PR, @math{-/G/1}--PS and load-dependent variants. @item For @strong{open} networks, the following server types are supported: @math{M/M/m}--FCFS, @math{-/G/\infty} and @math{-/G/1}--PS. General load-dependent nodes are @emph{not} supported. Multiclass open networks do not support multiple server @math{M/M/m} nodes, but only single server @math{M/M/1}--FCFS. @item For @strong{mixed} networks, the following server types are supported: @math{M/M/1}--FCFS, @math{-/G/\infty} and @math{-/G/1}--PS. General load-dependent nodes are @emph{not} supported. @end itemize @strong{INPUTS} @table @code @item @var{N} @itemx @var{N}(c) Number of requests in the system for closed networks. For single-class networks, @var{N} must be a scalar. For multiclass networks, @code{@var{N}(c)} is the population size of closed class @math{c}. @item @var{lambda} @itemx @var{lambda}(c) External arrival rate (scalar) for open networks. For single-class networks, @var{lambda} must be a scalar. For multiclass networks, @code{@var{lambda}(c)} is the class @math{c} overall arrival rate. @item @var{QQ}@{i@} List of queues in the network. This must be a cell array with @math{N} elements, such that @code{@var{QQ}@{i@}} is a struct produced by the @code{qnmknode} function. @item @var{Z} External delay ("think time") for closed networks. Default 0. @end table @strong{OUTPUTS} @table @code @item @var{U}(k) If @math{k} is a FCFS node, then @code{@var{U}(k)} is the utilization of service center @math{k}. If @math{k} is an IS node, then @code{@var{U}(k)} is the @emph{traffic intensity} defined as @code{@var{X}(k)*@var{S}(k)}. @item @var{R}(k) average response time of service center @math{k}. @item @var{Q}(k) average number of customers in service center @math{k}. @item @var{X}(k) throughput of service center @math{k}. @end table Note that for multiclass networks, the computed results are per-class utilization, response time, number of customers and throughput: @code{@var{U}(c,k)}, @code{@var{R}(c,k)}, @code{@var{Q}(c,k)}, @code{@var{X}(c,k)}. String literals are case-insensitive, so @var{"closed"}, @var{"Closed"} and @var{"CLoSEd"} are all equivalent. @end deftypefn @noindent @strong{EXAMPLE} Let us consider a closed, multiclass network with @math{C=2} classes and @math{K=3} service center. Let the population be @math{M=(2, 1)} (class 1 has 2 requests, and class 2 has 1 request). The nodes are as follows: @itemize @item Node 1 is a @math{M/M/1}--FCFS node, with load-dependent service times. Service times are class-independent, and are defined by the matrix @code{[0.2 0.1 0.1; 0.2 0.1 0.1]}. Thus, @code{@var{S}(1,2) = 0.2} means that service time for class 1 customers where there are 2 requests in 0.2. Note that service times are class-independent; @item Node 2 is a @math{-/G/1}--PS node, with service times @math{S_{1, 2} = 0.4} for class 1, and @math{S_{2, 2} = 0.6} for class 2 requests; @item Node 3 is a @math{-/G/\infty} node (delay center), with service times @math{S_{1, 3}=1} and @math{S_{2, 3}=2} for class 1 and 2 respectively. @end itemize After defining the per-class visit count @var{V} such that @code{@var{V}(c,k)} is the visit count of class @math{c} requests to service center @math{k}. We can define and solve the model as follows: @example @verbatim QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), ... qnmknode( "-/g/1-ps", [0.4; 0.6] ), ... qnmknode( "-/g/inf", [1; 2] ) }; V = [ 1 0.6 0.4; ... 1 0.3 0.7 ]; N = [ 2 1 ]; [U R Q X] = qnsolve( "closed", N, QQ, V ); @end verbatim @end example @anchor{doc-qnclosed} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnclosed (@var{N}, @var{S}, @var{V}, @dots{}) @cindex closed network, single class @cindex closed network, multiple classes This function computes steady-state performance measures of closed queueing networks using the Mean Value Analysis (MVA) algorithm. The qneneing network is allowed to contain fixed-capacity centers, delay centers or general load-dependent centers. Multiple request classes are supported. This function dispatches the computation to one of @code{qncsemva}, @code{qncsmvald} or @code{qncmmva}. @itemize @item If @var{N} is a scalar, the network is assumed to have a single class of requests; in this case, the exact MVA algorithm is used to analyze the network. If @var{S} is a vector, then @code{@var{S}(k)} is the average service time of center @math{k}, and this function calls @code{qncsmva} which supports load-independent service centers. If @var{S} is a matrix, @code{@var{S}(k,i)} is the average service time at center @math{k} when @math{i=1, @dots{}, N} jobs are present; in this case, the network is analyzed with the @code{qncmmvald} function. @item If @var{N} is a vector, the network is assumed to have multiple classes of requests, and is analyzed using the exact multiclass MVA algorithm as implemented in the @code{qncmmva} function. @end itemize @seealso{qncsmva, qncsmvald, qncmmva} @end deftypefn @noindent @strong{EXAMPLE} @example @verbatim P = [0 0.3 0.7; 1 0 0; 1 0 0]; # Transition probability matrix S = [1 0.6 0.2]; # Average service times m = ones(size(S)); # All centers are single-server Z = 2; # External delay N = 15; # Maximum population to consider V = qncsvisits(P); # Compute number of visits X_bsb_lower = X_bsb_upper = X_ab_lower = X_ab_upper = X_mva = zeros(1,N); for n=1:N [X_bsb_lower(n) X_bsb_upper(n)] = qncsbsb(n, S, V, m, Z); [X_ab_lower(n) X_ab_upper(n)] = qncsaba(n, S, V, m, Z); [U R Q X] = qnclosed( n, S, V, m, Z ); X_mva(n) = X(1)/V(1); endfor close all; plot(1:N, X_ab_lower,"g;Asymptotic Bounds;", ... 1:N, X_bsb_lower,"k;Balanced System Bounds;", ... 1:N, X_mva,"b;MVA;", "linewidth", 2, ... 1:N, X_bsb_upper,"k", 1:N, X_ab_upper,"g" ); axis([1,N,0,1]); legend("location","southeast"); legend("boxoff"); xlabel("Number of Requests n"); ylabel("System Throughput X(n)"); @end verbatim @end example @anchor{doc-qnopen} @deftypefn {Function File} {[@var{U}, @var{R}, @var{Q}, @var{X}] =} qnopen (@var{lambda}, @var{S}, @var{V}, @dots{}) @cindex open network Compute utilization, response time, average number of requests in the system, and throughput for open queueing networks. If @var{lambda} is a scalar, the network is considered a single-class QN and is solved using @code{qnopensingle}. If @var{lambda} is a vector, the network is considered as a multiclass QN and solved using @code{qnopenmulti}. @seealso{qnos, qnom} @end deftypefn @c @c @c @node Bounds Analysis @section Bounds Analysis @c @anchor{doc-qnosaba} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosaba (@var{lambda}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosaba (@var{lambda}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosaba (@var{lambda}, @var{S}, @var{V}, @var{m}) @cindex bounds, asymptotic @cindex open network Compute Asymptotic Bounds for open, single-class networks with @math{K} service centers. @strong{INPUTS} @table @code @item @var{lambda} Arrival rate of requests (scalar, @code{@var{lambda} @geq{} 0}). @item @var{D}(k) service demand at center @math{k}. (vector of length @math{K}, @code{@var{D}(k) @geq{} 0}). @item @var{S}(k) mean service time at center @math{k}. (vector of length @math{K}, @code{@var{S}(k) @geq{} 0}). @item @var{V}(k) mean number of visits to center @math{k}. (vector of length @math{K}, @code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. This function only supports @math{M/M/1} queues, therefore @var{m} must be @code{ones(size(S))}. @end table @strong{OUTPUTS} @table @code @item @var{Xl} @item @var{Xu} Lower and upper bounds on the system throughput. @var{Xl} is always set to @math{0} since there can be no lower bound on the throughput of open networks (scalar). @item @var{Rl} @item @var{Ru} Lower and upper bounds on the system response time. @var{Ru} is always set to @code{+inf} since there can be no upper bound on the throughput of open networks (scalar). @end table @seealso{qnomaba} @end deftypefn @c @anchor{doc-qnomaba} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnomaba (@var{lambda}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Rl}] =} qnomaba (@var{lambda}, @var{S}, @var{V}) @cindex bounds, asymptotic @cindex open network @cindex multiclass network, open Compute Asymptotic Bounds for open, multiclass networks with @math{K} service centers and @math{C} customer classes. @strong{INPUTS} @table @code @item @var{lambda}(c) class @math{c} arrival rate to the system (vector of length @math{C}, @code{@var{lambda}(c) > 0}). @item @var{D}(c, k) class @math{c} service demand at center @math{k} (@math{C \times K} matrix, @code{@var{D}(c, k) @geq{} 0}). @item @var{S}(c, k) mean service time of class @math{c} requests at center @math{k} (@math{C \times K} matrix, @code{@var{S}(c, k) @geq{} 0}). @item @var{V}(c, k) mean number of visits of class @math{c} requests at center @math{k} (@math{C \times K} matrix, @code{@var{V}(c, k) @geq{} 0}). @end table @strong{OUTPUTS} @table @code @item @var{Xl}(c) @item @var{Xu}(c) lower and upper bounds of class @math{c} throughput. @code{@var{Xl}(c)} is always @math{0} since there can be no lower bound on the throughput of open networks (vector of length @math{C}). @item @var{Rl}(c) @item @var{Ru}(c) lower and upper bounds of class @math{c} response time. @code{@var{Ru}(c)} is always @code{+inf} since there can be no upper bound on the response time of open networks (vector of length @math{C}). @end table @seealso{qnombsb} @end deftypefn @c @anchor{doc-qncsaba} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsaba (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @cindex bounds, asymptotic @cindex asymptotic bounds @cindex closed network, single class Compute Asymptotic Bounds for the system throughput and response time of closed, single-class networks with @math{K} service centers. Single-server and infinite-server nodes are supported. Multiple-server nodes and general load-dependent servers are not supported. @strong{INPUTS} @table @code @item @var{N} number of requests in the system (scalar, @code{@var{N}>0}). @item @var{D}(k) service demand at center @math{k} (@code{@var{D}(k) @geq{} 0}). @item @var{S}(k) mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). @item @var{V}(k) average number of visits to center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k} (if @var{m} is a scalar, all centers have that number of servers). If @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); if @code{@var{m}(k) = 1}, center @math{k} is a M/M/1-FCFS server. This function does not support multiple-server nodes. Default is 1. @item @var{Z} External delay (scalar, @code{@var{Z} @geq{} 0}). Default is 0. @end table @strong{OUTPUTS} @table @code @item @var{Xl} @itemx @var{Xu} Lower and upper bounds on the system throughput. @item @var{Rl} @itemx @var{Ru} Lower and upper bounds on the system response time. @end table @seealso{qncmaba} @end deftypefn @c @anchor{doc-qncmaba} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmaba (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @cindex bounds, asymptotic @cindex asymptotic bounds @cindex closed network @cindex multiclass network, closed @cindex closed multiclass network Compute Asymptotic Bounds for closed, multiclass networks with @math{K} service centers and @math{C} customer classes. Single-server and infinite-server nodes are supported. Multiple-server nodes and general load-dependent servers are not supported. @strong{INPUTS} @table @code @item @var{N}(c) number of class @math{c} requests in the system (vector of length @math{C}, @code{@var{N}(c) @geq{} 0}). @item @var{D}(c, k) class @math{c} service demand at center @math{k} (@math{C \times K} matrix, @code{@var{D}(c,k) @geq{} 0}). @item @var{S}(c, k) mean service time of class @math{c} requests at center @math{k} (@math{C \times K} matrix, @code{@var{S}(c,k) @geq{} 0}). @item @var{V}(c,k) average number of visits of class @math{c} requests to center @math{k} (@math{C \times K} matrix, @code{@var{V}(c,k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k} (if @var{m} is a scalar, all centers have that number of servers). If @code{@var{m}(k) < 1}, center @math{k} is a delay center (IS); if @code{@var{m}(k) = 1}, center @math{k} is a M/M/1-FCFS server. This function does not support multiple-server nodes. Default is 1. @item @var{Z}(c) class @math{c} external delay (vector of length @math{C}, @code{@var{Z}(c) @geq{} 0}). Default is 0. @end table @strong{OUTPUTS} @table @code @item @var{Xl}(c) @itemx @var{Xu}(c) Lower and upper bounds for class @math{c} throughput. @item @var{Rl}(c) @itemx @var{Ru}(c) Lower and upper bounds for class @math{c} response time. @end table @strong{REFERENCES} @itemize @item Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 5.2 ("Asymptotic Bounds"). @end itemize @seealso{qncsaba} @end deftypefn @c @anchor{doc-qnosbsb} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosbsb (@var{lambda}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qnosbsb (@var{lambda}, @var{S}, @var{V}) @cindex bounds, balanced system @cindex open network Compute Balanced System Bounds for single-class, open networks with @math{K} service centers. @strong{INPUTS} @table @code @item @var{lambda} overall arrival rate to the system (scalar, @code{@var{lambda} @geq{} 0}). @item @var{D}(k) service demand at center @math{k} (@code{@var{D}(k) @geq{} 0}). @item @var{S}(k) service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). @item @var{V}(k) mean number of visits at center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. This function only supports @math{M/M/1} queues, therefore @var{m} must be @code{ones(size(S))}. @end table @strong{OUTPUTS} @table @code @item @var{Xl} @item @var{Xu} Lower and upper bounds on the system throughput. @var{Xl} is always set to @math{0}, since there can be no lower bound on open networks throughput. @item @var{Rl} @itemx @var{Ru} Lower and upper bounds on the system response time. @end table @seealso{qnosaba} @end deftypefn @c @anchor{doc-qncsbsb} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncsbsb (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @cindex bounds, balanced system @cindex closed network, single class @cindex balanced system bounds Compute Balanced System Bounds on system throughput and response time for closed, single-class networks with @math{K} service centers. @strong{INPUTS} @table @code @item @var{N} number of requests in the system (scalar, @code{@var{N} @geq{} 0}). @item @var{D}(k) service demand at center @math{k} (@code{@var{D}(k) @geq{} 0}). @item @var{S}(k) mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). @item @var{V}(k) average number of visits to center @math{k} (@code{@var{V}(k) @geq{} 0}). Default is 1. @item @var{m}(k) number of servers at center @math{k}. This function supports @code{@var{m}(k) = 1} only (single-eserver FCFS nodes); this parameter is only for compatibility with @code{qncsaba}. Default is 1. @item @var{Z} External delay (@code{@var{Z} @geq{} 0}). Default is 0. @end table @strong{OUTPUTS} @table @code @item @var{Xl} @itemx @var{Xu} Lower and upper bound on the system throughput. @item @var{Rl} @itemx @var{Ru} Lower and upper bound on the system response time. @end table @strong{REFERENCES} @itemize @item Edward D. Lazowska, John Zahorjan, G. Scott Graham, and Kenneth C. Sevcik, @cite{Quantitative System Performance: Computer System Analysis Using Queueing Network Models}, Prentice Hall, 1984. @url{http://www.cs.washington.edu/homes/lazowska/qsp/}. In particular, see section 5.4 ("Balanced Systems Bounds"). @end itemize @seealso{qncmbsb} @end deftypefn @c @anchor{doc-qncmbsb} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmbsb (@var{N}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmbsb (@var{N}, @var{S}, @var{V}) @cindex bounds, balanced system @cindex balanced system bounds @cindex multiclass network, closed @cindex closed multiclass network Compute Balanced System Bounds for closed, multiclass networks with @math{K} service centers and @math{C} customer classes. Only single-server nodes are supported. @strong{INPUTS} @table @code @item @var{N}(c) number of class @math{c} requests in the system (vector of length @math{C}). @item @var{D}(c, k) class @math{c} service demand at center @math{k} (@math{C \times K} matrix, @code{@var{D}(c,k) @geq{} 0}). @item @var{S}(c, k) mean service time of class @math{c} requests at center @math{k} (@math{C \times K} matrix, @code{@var{S}(c,k) @geq{} 0}). @item @var{V}(c,k) average number of visits of class @math{c} requests to center @math{k} (@math{C \times K} matrix, @code{@var{V}(c,k) @geq{} 0}). @end table @strong{OUTPUTS} @table @code @item @var{Xl}(c) @itemx @var{Xu}(c) Lower and upper class @math{c} throughput bounds (vector of length @math{C}). @item @var{Rl}(c) @itemx @var{Ru}(c) Lower and upper class @math{c} response time bounds (vector of length @math{C}). @end table @seealso{qncsbsb} @end deftypefn @c @anchor{doc-qncmcb} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmcb (@var{N}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncmcb (@var{N}, @var{S}, @var{V}) @cindex multiclass network, closed @cindex closed multiclass network @cindex bounds, composite @cindex composite bounds Composite Bound (CB) on throughput and response time for closed multiclass networks. This function implements the Composite Bound Method described in T. Kerola, @cite{The Composite Bound Method (CBM) for Computing Throughput Bounds in Multiple Class Environments}, Technical Report CSD-TR-475, Purdue University, march 13, 1984 (revised august 27, 1984). @strong{INPUTS} @table @code @item @var{N}(c) number of class @math{c} requests in the system. @item @var{D}(c, k) class @math{c} service demand at center @math{k} (@code{@var{S}(c,k) @geq{} 0}). @item @var{S}(c, k) mean service time of class @math{c} requests at center @math{k} (@code{@var{S}(c,k) @geq{} 0}). @item @var{V}(c,k) average number of visits of class @math{c} requests to center @math{k} (@code{@var{V}(c,k) @geq{} 0}). @end table @strong{OUTPUTS} @table @code @item @var{Xl}(c) @itemx @var{Xu}(c) Lower and upper class @math{c} throughput bounds. @item @var{Rl}(c) @itemx @var{Ru}(c) Lower and upper class @math{c} response time bounds. @end table @strong{REFERENCES} @itemize @item Teemu Kerola, @cite{The Composite Bound Method (CBM) for Computing Throughput Bounds in Multiple Class Environments}, Performance Evaluation Vol. 6, Issue 1, March 1986, DOI @uref{http://dx.doi.org/10.1016/0166-5316(86)90002-7, 10.1016/0166-5316(86)90002-7}. Also available as @uref{http://docs.lib.purdue.edu/cstech/395/, Technical Report CSD-TR-475}, Department of Computer Sciences, Purdue University, mar 13, 1984 (Revised Aug 27, 1984). @end itemize @end deftypefn @c @anchor{doc-qncspb} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{D} ) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{S}, @var{V} ) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{S}, @var{V}, @var{m} ) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}] =} qncspb (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z} ) @cindex bounds, PB @cindex PB bounds @cindex closed network, single class Compute PB Bounds (C. H. Hsieh and S. Lam, 1987) for single-class, closed networks with @math{K} service centers. @strong{INPUTS} @table @code @item @var{} number of requests in the system (scalar, @code{@var{N} > 0}). @item @var{D}(k) service demand of service center @math{k} (@code{@var{D}(k) @geq{} 0}). @item @var{S}(k) mean service time at center @math{k} (@code{@var{S}(k) @geq{} 0}). @item @var{V}(k) visit ratio to center @math{k} (@code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. This function only supports @math{M/M/1} queues, therefore @var{m} must be @code{ones(size(S))}. @item @var{Z} external delay (think time, @code{@var{Z} @geq{} 0}). Default 0. @end table @strong{OUTPUTS} @table @code @item @var{Xl} @itemx @var{Xu} Lower and upper bounds on the system throughput. @item @var{Rl} @itemx @var{Ru} Lower and upper bounds on the system response time. @end table @strong{REFERENCES} @itemize @item C. H. Hsieh and S. Lam, @cite{Two classes of performance bounds for closed queueing networks}, Performance Evaluation, Vol. 7 Issue 1, pp. 3--30, February 1987, DOI @uref{http://dx.doi.org/10.1016/0166-5316(87)90054-X, 10.1016/0166-5316(87)90054-X}. Also available as @uref{ftp://ftp.cs.utexas.edu/pub/techreports/tr85-09.pdf, Technical Report TR-85-09}, Department of Computer Science, University of Texas at Austin, June 1985 @end itemize This function implements the non-iterative variant described in G. Casale, R. R. Muntz, G. Serazzi, @cite{Geometric Bounds: a Non-Iterative Analysis Technique for Closed Queueing Networks}, IEEE Transactions on Computers, 57(6):780-794, June 2008. @seealso{qncsaba, qbcsbsb, qncsgb} @end deftypefn @c @anchor{doc-qncsgb} @deftypefn {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{D}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{S}, @var{V}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{S}, @var{V}, @var{m}) @deftypefnx {Function File} {[@var{Xl}, @var{Xu}, @var{Rl}, @var{Ru}, @var{Ql}, @var{Qu}] =} qncsgb (@var{N}, @var{S}, @var{V}, @var{m}, @var{Z}) @cindex bounds, geometric @cindex geometric bounds @cindex closed network Compute Geometric Bounds (GB) on system throughput, system response time and server queue lenghts for closed, single-class networks with @math{K} service centers and @math{N} requests. @strong{INPUTS} @table @code @item @var{N} number of requests in the system (scalar, @code{@var{N} > 0}). @item @var{D}(k) service demand of service center @math{k} (vector of length @math{K}, @code{@var{D}(k) @geq{} 0}). @item @var{S}(k) mean service time at center @math{k} (vector of length @math{K}, @code{@var{S}(k) @geq{} 0}). @item @var{V}(k) visit ratio to center @math{k} (vector of length @math{K}, @code{@var{V}(k) @geq{} 0}). @item @var{m}(k) number of servers at center @math{k}. This function only supports @math{M/M/1} queues, therefore @var{m} must be @code{ones(size(S))}. @item @var{Z} external delay (think time, @code{@var{Z} @geq{} 0}, scalar). Default is 0. @end table @strong{OUTPUTS} @table @code @item @var{Xl} @itemx @var{Xu} Lower and upper bound on the system throughput. If @code{@var{Z}>0}, these bounds are computed using @emph{Geometric Square-root Bounds} (GSB). If @code{@var{Z}==0}, these bounds are computed using @emph{Geometric Bounds} (GB) @item @var{Rl} @itemx @var{Ru} Lower and upper bound on the system response time. These bounds are derived from @var{Xl} and @var{Xu} using Little's Law: @code{@var{Rl} = @var{N} / @var{Xu} - @var{Z}}, @code{@var{Ru} = @var{N} / @var{Xl} - @var{Z}} @item @var{Ql}(k) @itemx @var{Qu}(k) lower and upper bounds of center @math{K} queue length. @end table @strong{REFERENCES} @itemize @item G. Casale, R. R. Muntz, G. Serazzi, @cite{Geometric Bounds: a Non-Iterative Analysis Technique for Closed Queueing Networks}, IEEE Transactions on Computers, 57(6):780-794, June 2008. @uref{http://doi.ieeecomputersociety.org/10.1109/TC.2008.37, 10.1109/TC.2008.37} @end itemize In this implementation we set @math{X^+} and @math{X^-} as the upper and lower Asymptotic Bounds as computed by the @command{qncsab} function, respectively. @end deftypefn @c @c Examples @c @node QN Analysis Examples @section QN Analysis Examples In this section we illustrate with a few examples how the @code{queueing} package can be used to analyze queueing network models. Further examples can be found in the functions demo blocks, and can be inspected with the @code{demo @emph{function}} Octave command. @subsection Closed, Single Class Network Let us consider again the network shown in @ref{fig:qn_closed_single}. We denote with @math{S_k} the average service time at center @math{k}, @math{k=1, 2, 3}. Let the service times be @math{S_1 = 1.0}, @math{S_2 = 2.0} and @math{S_3 = 0.8}. The routing of jobs within the network is described with a @emph{routing probability matrix} @math{\bf P}: a request completing service at center @math{i} is enqueued at center @math{j} with probability @math{P_{i, j}}. We use the following routing matrix: @iftex @tex $$ P = \pmatrix{ 0 & 0.3 & 0.7 \cr 1 & 0 & 0 \cr 1 & 0 & 0 } $$ @end tex @end iftex @ifnottex @example / 0 0.3 0.7 \ P = | 1 0 0 | \ 1 0 0 / @end example @end ifnottex The network above can be analyzed with the @command{qnclosed} function @pxref{doc-qnclosed}. @command{qnclosed} requires the following parameters: @table @var @item N Number of requests in the network (since we are considering a closed network, the number of requests is fixed) @item S Array of average service times at the centers: @code{@var{S}(k)} is the average service time at center @math{k}. @item V Array of visit ratios: @code{@var{V}(k)} is the average number of visits to center @math{k}. @end table We can compute @math{V_k} from the routing probability matrix @math{P_{i, j}} using the @command{qncsvisits} function @pxref{doc-qncsvisits}. Therefore, we can analyze the network for a given population size @math{N} (e.g., @math{N=10}) as follows: @example @group @kbd{N = 10;} @kbd{S = [1 2 0.8];} @kbd{P = [0 0.3 0.7; 1 0 0; 1 0 0];} @kbd{V = qncsvisits(P);} @kbd{[U R Q X] = qnclosed( N, S, V )} @result{} U = 0.99139 0.59483 0.55518 @result{} R = 7.4360 4.7531 1.7500 @result{} Q = 7.3719 1.4136 1.2144 @result{} X = 0.99139 0.29742 0.69397 @end group @end example The output of @command{qnclosed} includes the vectors of utilizations @math{U_k} at center @math{k}, response time @math{R_k}, average number of customers @math{Q_k} and throughput @math{X_k}. In our example, the throughput of center 1 is @math{X_1 = 0.99139}, and the average number of requests in center 3 is @math{Q_3 = 1.2144}. The utilization of center 1 is @math{U_1 = 0.99139}, which is the highest among the service centers. Thus, center 1 is the @emph{bottleneck device}. This network can also be analyzed with the @command{qnsolve} function @pxref{doc-qnsolve}. @command{qnsolve} can handle open, closed or mixed networks, and allows the network to be described in a very flexible way. First, let @var{Q1}, @var{Q2} and @var{Q3} be the variables describing the service centers. Each variable is instantiated with the @command{qnmknode} function. @example @group @kbd{Q1 = qnmknode( "m/m/m-fcfs", 1 );} @kbd{Q2 = qnmknode( "m/m/m-fcfs", 2 );} @kbd{Q3 = qnmknode( "m/m/m-fcfs", 0.8 );} @end group @end example The first parameter of @command{qnmknode} is a string describing the type of the node; @code{"m/m/m-fcfs"} denotes a @math{M/M/m}--FCFS center (this parameter is case-insensitive). The second parameter gives the average service time. An optional third parameter can be used to specify the number @math{m} of service centers. If omitted, it is assumed @math{m=1} (single-server node). Now, the network can be analyzed as follows: @example @group @kbd{N = 10;} @kbd{V = [1 0.3 0.7];} @kbd{[U R Q X] = qnsolve( "closed", N, @{ Q1, Q2, Q3 @}, V )} @result{} U = 0.99139 0.59483 0.55518 @result{} R = 7.4360 4.7531 1.7500 @result{} Q = 7.3719 1.4136 1.2144 @result{} X = 0.99139 0.29742 0.69397 @end group @end example @subsection Open, Single Class Network Let us consider an open network with @math{K=3} service centers and the following routing probabilities: @iftex @tex $$ P = \pmatrix{ 0 & 0.3 & 0.5 \cr 1 & 0 & 0 \cr 1 & 0 & 0 } $$ @end tex @end iftex @ifnottex @example / 0 0.3 0.5 \ P = ! 1 0 0 | \ 1 0 0 / @end example @end ifnottex In this network, requests can leave the system from center 1 with probability @math{1-(0.3+0.5) = 0.2}. We suppose that external jobs arrive at center 1 with rate @math{\lambda_1 = 0.15}; there are no arrivals at centers 2 and 3. Similarly to closed networks, we first compute the visit counts @math{V_k} to center @math{k}, @math{k = 1, 2, 3}. We use the @command{qnosvisits} function as follows: @example @group @kbd{P = [0 0.3 0.5; 1 0 0; 1 0 0];} @kbd{lambda = [0.15 0 0];} @kbd{V = qnosvisits(P, lambda)} @result{} V = 5.00000 1.50000 2.50000 @end group @end example @noindent where @code{@var{lambda}(k)} is the arrival rate at center @math{k}, and @var{P} is the routing matrix. Assuming the same service times as in the previous example, the network can be analyzed with the @command{qnopen} function @pxref{doc-qnopen}, as follows: @example @group @kbd{S = [1 2 0.8];} @kbd{[U R Q X] = qnopen( sum(lambda), S, V )} @result{} U = 0.75000 0.45000 0.30000 @result{} R = 4.0000 3.6364 1.1429 @result{} Q = 3.00000 0.81818 0.42857 @result{} X = 0.75000 0.22500 0.37500 @end group @end example The first parameter of the @command{qnopen} function is the (scalar) aggregate arrival rate. Again, it is possible to use the @command{qnsolve} high-level function: @example @group @kbd{Q1 = qnmknode( "m/m/m-fcfs", 1 );} @kbd{Q2 = qnmknode( "m/m/m-fcfs", 2 );} @kbd{Q3 = qnmknode( "m/m/m-fcfs", 0.8 );} @kbd{lambda = [0.15 0 0];} @kbd{[U R Q X] = qnsolve( "open", sum(lambda), @{ Q1, Q2, Q3 @}, V )} @result{} U = 0.75000 0.45000 0.30000 @result{} R = 4.0000 3.6364 1.1429 @result{} Q = 3.00000 0.81818 0.42857 @result{} X = 0.75000 0.22500 0.37500 @end group @end example @subsection Closed Multiclass Network/1 The following example is taken from Herb Schwetman, @cite{Implementing the Mean Value Algorithm for the Solution of Queueing Network Models}, Technical Report CSD-TR-355, Department of Computer Sciences, Purdue University, Feb 15, 1982. Let us consider the following multiclass QN with three servers and two classes @float Figure,fig:apl @center @image{qn_closed_multi_apl} @end float Servers 1 and 2 (labeled @emph{APL} and @emph{IMS}, respectively) are infinite server nodes; server 3 (labeled @emph{SYS}) is Processor Sharing (PS). Mean service times are given in the following table: @multitable @columnfractions .15 .15 .15 .15 @headitem @tab APL @tab IMS @tab SYS @item Class 1 @tab 1 @tab - @tab 0.025 @item Class 2 @tab - @tab 15 @tab 0.500 @end multitable There is no class switching. If we assume a population of 15 requests for class 1, and 5 requests for class 2, then the model can be analyzed as follows: @example @verbatim S = [1 0 .025; 0 15 .5]; P = zeros(2,3,2,3); P(1,1,1,3) = P(1,3,1,1) = 1; P(2,2,2,3) = P(2,3,2,2) = 1; V = qncmvisits(P,[3 3]); # reference station is station 3 N = [15 5]; m = [-1 -1 1]; [U R Q X] = qncmmva(N,S,V,m) @end verbatim @result{} U = 14.32312 0.00000 0.35808 0.00000 4.70699 0.15690 R = 1.00000 0.00000 0.04726 0.00000 15.00000 0.93374 Q = 14.32312 0.00000 0.67688 0.00000 4.70699 0.29301 X = 14.32312 0.00000 14.32312 0.00000 0.31380 0.31380 @end example @subsection Closed Multiclass Network/2 The following example is from M. Marzolla, @cite{The qnetworks Toolbox: A Software Package for Queueing Networks Analysis}, Technical Report @uref{http://www.informatica.unibo.it/it/ricerca/technical-report/2010/UBLCS-2010-04, UBLCS-2010-04}, Department of Computer Science, University of Bologna, Italy, February 2010. @float Figure,fig:web_model @center @image{qn_web_model,3in} @caption{Three-tier enterprise system model} @end float The model shown in @ref{fig:web_model} shows a three-tier enterprise system with @math{K=6} service centers. The first tier contains the @emph{Web server} (node 1), which is responsible for generating Web pages and transmitting them to clients. The application logic is implemented by nodes 2 and 3, and the storage tier is made of nodes 4--6.The system is subject to two workload classes, both represented as closed populations of @math{N_1} and @math{N_2} requests, respectively. Let @math{D_{c, k}} denote the service demand of class @math{c} requests at center @math{k}. We use the parameter values: @multitable @columnfractions .2 .33 .1 .1 @headitem Serv. no. @tab Name @tab Class 1 @tab Class 2 @item 1 @tab Web Server @tab 12 @tab 2 @item 2 @tab App. Server 1 @tab 14 @tab 20 @item 3 @tab App. Server 2 @tab 23 @tab 14 @item 4 @tab DB Server 1 @tab 20 @tab 90 @item 5 @tab DB Server 2 @tab 80 @tab 30 @item 6 @tab DB Server 3 @tab 31 @tab 33 @end multitable We set the total number of requests to 100, that is @math{N_1 + N_2 = N = 100}, and we study how different population mixes @math{(N_1, N_2)} affect the system throughput and response time. Let @math{0 < \beta_1 < 1} denote the fraction of class 1 requests: @math{N_1 = \beta_1 N}, @math{N_2 = (1-\beta_1)N}. The following Octave code defines the model for @math{\beta_1 = 0.1}: @example @group N = 100; # total population size beta1 = 0.1; # fraction of class 1 reqs. S = [12 14 23 20 80 31; \ 2 20 14 90 30 33 ]; V = ones(size(S)); pop = [fix(beta1*N) N-fix(beta1*N)]; [U R Q X] = qncmmva(pop, S, V); @end group @end example The @command{qncmmva(pop, S, V)} function invocation uses the multiclass MVA algorithm to compute per-class utilizations @math{U_{c, k}}, response times @math{R_{c,k}}, mean queue lengths @math{Q_{c,k}} and throughputs @math{X_{c,k}} at each service center @math{k}, given a population vector @var{pop}, mean service times @var{S} and visit ratios @var{V}. Since we are given the service demands @math{D_{c, k} = S_{c, k} V_{c,k}}, but function @command{qncmmva} requires separate service times and visit ratios, we set the service times equal to the demands, and all visit ratios equal to one. Overall class and system throughputs and response times can also be computed: @example @group X1 = X(1,1) / V(1,1) # class 1 throughput @result{} X1 = 0.0044219 X2 = X(2,1) / V(2,1) # class 2 throughput @result{} X2 = 0.010128 XX = X1 + X2 # system throughput @result{} XX = 0.014550 R1 = dot(R(1,:), V(1,:)) # class 1 resp. time @result{} R1 = 2261.5 R2 = dot(R(2,:), V(2,:)) # class 2 resp. time @result{} R2 = 8885.9 RR = N / XX # system resp. time @result{} RR = 6872.7 @end group @end example @code{dot(X,Y)} computes the dot product of two vectors. @code{R(1,:)} is the first row of matrix @var{R} and @code{V(1,:)} is the first row of matrix @var{V}, so @code{dot(R(1,:), V(1,:))} computes @math{\sum_k R_{1,k} V_{1,k}}. @float Figure,fig:web @center @image{web,5in} @caption{Throughput and Response Times as a function of the population mix} @end float We can also compute the system power @math{\Phi = X / R}, which defines how efficiently resources are being used: high values of @math{\Phi} denote the desirable situation of high throughput and low response time. @ref{fig:power} shows @math{\Phi} as a function of @math{\beta_1}. We observe a ``plateau'' of the global system power, corresponding to values of @math{\beta_1} which approximately lie between @math{0.3} and @math{0.7}. The per-class power exhibits an interesting (although not completely surprising) pattern, where the class with higher population exhibits worst efficiency as it produces higher contention on the resources. @float Figure,fig:power @center @image{power,5in} @caption{System Power as a function of the population mix} @end float @subsection Closed Multiclass Network/3 We now consider an example of multiclass network with class switching. The example is taken from @ref{Sch82}, and is shown in Figure @ref{fig:class_switching}. @float Figure,fig:class_switching @center @image{qn_closed_multi_cs,3in} @caption{Multiclass Model with Class Switching} @end float The system consists of three devices and two job classes. The CPU node is a PS server, while the two nodes labeled I/O are FCFS. Class 1 mean service time at the CPU is @math{0.01}; class 2 mean service time at the CPU is @math{0.05}. The mean service time at node 2 is @math{0.1}, and is class-independent. Similarly, the mean service time at node 3 is @math{0.07}. Jobs in class 1 leave the CPU and join class 2 with probability @math{0.1}; jobs of class 2 leave the CPU and join class 1 with probability @math{0.2}. There are @math{N=3} jobs, which are initially allocated to class 1. However, note that since class switching is allowed, the total number of jobs in each class does not remain constant; however the total number of jobs does. @example @verbatim C = 2; K = 3; S = [.01 .07 .10; ... .05 .07 .10 ]; P = zeros(C,K,C,K); P(1,1,1,2) = .7; P(1,1,1,3) = .2; P(1,1,2,1) = .1; P(2,1,2,2) = .3; P(2,1,2,3) = .5; P(2,1,1,1) = .2; P(1,2,1,1) = P(2,2,2,1) = 1; P(1,3,1,1) = P(2,3,2,1) = 1; N = [3 0]; [U R Q X] = qncmmva(N, S, P) @end verbatim @result{} U = 0.12609 0.61784 0.25218 0.31522 0.13239 0.31522 R = 0.014653 0.133148 0.163256 0.073266 0.133148 0.163256 Q = 0.18476 1.17519 0.41170 0.46190 0.25183 0.51462 X = 12.6089 8.8262 2.5218 6.3044 1.8913 3.1522 @end example queueing/INDEX0000664000175000017500000000126012762046576013072 0ustar morenomorenoqueueing >> Queueing Networks and Markov chains Discrete-time Markov chains dtmcchkP dtmc dtmcbd dtmcexps dtmctaexps dtmcmtta dtmcfpt Continuous-time Markov chains ctmcchkQ ctmc ctmcbd ctmcexps ctmctaexps ctmcmtta ctmcfpt Single Station Queueing Systems qsmm1 qsmmm erlangb erlangc engset qsmminf qsmm1k qsmmmk qsammm qsmg1 qsmh1 Queueing Networks qncsvisits qnos qncsmva qncsmvald qncscmva qncsmvaap qncsconv qncsconvld qncsmvablo qnmarkov qncmvisits qnomvisits qnom qncmpopmix qncmmva qncmmvaap qnmix qnmknode qnsolve qnclosed qnopen Bounds Analysis qnosaba qnomaba qncsaba qncmaba qnosbsb qncsbsb qncmbsb qncmcb qncspb qncsgb queueing/NEWS0000664000175000017500000000745413356125620012776 0ustar morenomorenoSummary of important user-visible changes for queueing-1.2.6 ------------------------------------------------------------------------------ ** queueing-1.2.6 contains new features ** New functions dtmcisir() and ctmcisir() ** General documentation cleanup Summary of important user-visible changes for queueing-1.2.5 ------------------------------------------------------------------------------ ** queueing-1.2.5 is a bug fix release ** Fix for bug in qncmmva ** General documentation cleanup Summary of important user-visible changes for queueing-1.2.4 ------------------------------------------------------------------------------ ** queueing-1.2.4 is a bug fix release ** Fixes for bugs #48958, #48959 and #48960 Summary of important user-visible changes for queueing-1.2.3 ------------------------------------------------------------------------------ ** queueing-1.2.3 contains new features ** Added new functions erlangb (Erlang-B formula), erlangc (Erlang-C formula) and engset Summary of important user-visible changes for queueing-1.2.2 ------------------------------------------------------------------------------ ** queueing-1.2.2 is a bug fix release ** Fixed bug in qncmmva: utilization for M/M/m centers was not correctly scaled to [0,1] when m>1 ** Added warning to qncsmva and qncmmva to detect and report numerical instability problems Summary of important user-visible changes for queueing-1.2.1 ------------------------------------------------------------------------------ ** queueing-1.2.1 contains new features ** Function qnvisits() has been deprecated, and is replaced by qncsvisits(), qnosvisits() (for single-class networks) and qncmvisits(), qnomvisits() (for multiple-class networks). The new functions allow the user to specify the reference station. Summary of important user-visible changes for queueing-1.2.0 ------------------------------------------------------------------------------ ** queueing-1.2.0 includes many bug fixes and new features ** The documentation has been restructured, hopefully improving readability and overall organization ** Added functions to compute various kinds of performance bounds on multiclass networks; balanced system, asymptotic and composite bounds are supported. ** Added function qnom for analyzing open, multiclass product-form networks. ** Adopted a new scheme for naming functions; old names are still available for compatibility with existing scripts, but will be removed in future releases. ** Fixed bugs in qncscmva, qncsconv, qncsconvld, qnopensingle, qnopenmulti and qncmmva Summary of important user-visible changes for queueing-1.1.1 ------------------------------------------------------------------------------ ** queueing-1.1.1 is a bug fix release ** Increased tolerance in tests for dtmc_fpt and dtmc_mtta to avoid spurious failures on some platforms ** Set "Autoload: no" in the DESCRIPTION file. This means that this package is no longer automatically loaded on Octave startup. To use the queueing package you need to issue the command "pkg load queueing" at the Octave prompt. Summary of important user-visible changes for queueing-1.1.0 ------------------------------------------------------------------------------ ** Function ctmc_exps() can now compute the expected sojourn time until absorption for absorbing CTMC ** Functions ctmc_exps() and ctmc_taexps() now accept a scalar as the second argument (time). ** Function ctmc_bd() now returns the infinitesimal generator matrix Q of the birth-death process with given rates, not the steady-state solution. ** The following new functions have been added: dtmc_bd(), dtmc_mtta(), ctmc_check_Q(), dtmc_exps(), dtmc_taexps() ** The following deprecated functions have been removed: ctmc_bd_solve(), ctmc_solve(), dtmc_solve()